• 附3、第二天课程学习整体思路及问题 ---没用


    问题:
    1、集群如何启动,任务如何执行?
    java -server nimubs,supervisor
    client--->createTopology(序列化)--->提交jar到nimbuinbox--->nimbus分配任务(task总数/worker数)---.
    启动worker<------识别自己的任务<----supervisor---->watch----zk
    启动Spout/Bolt----TaskInfo<------worker---->zk
    集群架构中的各个模块如何启动?
    nimbus:用户启动
    supervisor:用户启动
    worker:supervisor启动
    Task:worker启动

    任务如何分配,如何执行?
    看图说话

    2、集群如何通信?
    集群架构中的各个模块是如何通信的?外部通信
    拓扑程序中的各个Task是如何通信的?内部通信

    3、如何保证消息的不丢失
    ack-fail机制如何实现的?
    成功:ack方法
    失败:fail方法

    4、[动手练习]尝试自己实现一个类似storm数据执行的框架

    1,任务分配
    ----->Task总数
    ----->可用worker数量
    2,通信机制
    ----->去zk获取每个组件的任务
    ----->启动不同服务
    nimbus,手动 java -server xxx.jar main-class
    superv,手动 java -server xxx.jar main-class
    worker,supervisor启动------java -server xxx.jar main-class(main(Worker.mk_work(new Worker())))
    Task, Worker启动Task--------Jvm--->Task.mk_Task()
    3,心跳机制
    thread1------tag=true
    thread2------>tag=true------tag=false
    thread1------>tag=true------tag=false------tag=true
    thread2------>tag=true------tag=false------tag=true-----tag=false
    4、任务执行(数据流)
    spout.nextTuple(tuple)----streamGrouping---> incomingQueue-------->bolt1.exeute(tuple)-----streamGrouping----> incomingQueue-------->bolt2.exeute(tuple)

    [实现数据执行的框架]
    spout-----线程1
    incomingQueue------queue
    bolt1-----线程2
    incomingQueue------queue
    bolt2-----线程3

    需要技术:
    线程池----->Exeutes.newFixPool(3)
    队列------->ArrayBolckingQueue(1000)

    伪代码:

    MyStrom{
    main(){
    //1、配置一个线程池
    //2、向线程池中提交任务
    spoutOutPutQueue = new ArrayBolckingQueue(1000)
    submit(new MySpout(spoutOutPutQueue))------collector.emit(tuple)------spoutOutPutQueue
    bolt1OutPutQueue = new ArrayBolckingQueue(1000)
    submit(new MyBolt1(spoutOutPutQueue,bolt1OutPutQueue))------>spoutOutPutQueue---->bolt1.execute(),collector.emit(tuple)------bolt1OutPutQueue
    submit(new MyBolt1(bolt1OutPutQueue))------>spoutOutPutQueue---->bolt1.execute()
    }
    }




















  • 相关阅读:
    html(单纯html标签)
    python 知识点
    浅谈五大Python Web框架
    Python3的变化
    测试开发
    常见的测试用例设计方法
    数字数据类型及其对应转移字符
    char *p 与char p[]
    C语言运算符优先级 详细列表
    软件自动化测试
  • 原文地址:https://www.cnblogs.com/shan13936/p/13837928.html
Copyright © 2020-2023  润新知