zoukankan      html  css  js  c++  java
  • jstorm学习总结

    jstorm学习总结

    整体架构

    jstorm是基于内存的计算,实时性远优于MapReduce。

    • 从应用的角度,jstorm应用是一种遵循某种编程规范的分布式应用。
    • 从系统的角度,jstorm是一套类似MapReduce的调度系统。
    • 从数据的角度,是一套基于流水线的消息处理机制

    jstorm处理数据都是基于流水线式的处理,所以比较适合无状态计算,无状态的意思是单个计算单元(spout/bolt)所依赖的数据都可以在本单元获得,应用场景包括:

    • 日志分析:logagent收集日志,存入消息中间件,jstorm拉取消息中间件,分析处理,计算结果放入queue供前端拉取,另一部分写入ELK供查询

    • 管道系统:将数据从一个系统传输到另一个系统,比如数据库转到mr。

    • 消息转化器:logagent收集,存入queue,jstorm转化。

    • 统计分析器:类似wordcount。

    • DRPC:实时性高,分布式远程过程调用。

    逻辑概念

    stream

    是一个不间断的无界的连续tuple。

    tuple

    流中的数据被抽象为tuple,拓扑中的节点要声明发射数据的name,接收节点可以根据name获取数据

    spout

    stream的源头,连接消息中间件或者其他源。

    bolt

    bolt是stream中间处理过程的抽象,接收spout/bolt数据,处理完发送给下一个bolt或结束。

    topology

    spout和bolt之间的订阅关系,可以得到一张有向无环图。

    stream grouping

    规定了tuple的发送方式:

      shuffle:轮训方式发送;
      field : 指定字段发送,相同字段会发送到同一个bolt中。
      AllGroup: 同一个tuple会发给每一个订阅者。
      DirectGroup:直接分组,消息的发送指定消息的接收。
      GlobalGroup:tuple分配给task id 最低的task
      localOrShuffleGrouping:本地的worker里有相应task,则随机在本地选择,如果没有则shuffle
    

    物理概念

    nimbus:

    管理作业资料,处理用户请求,资源分配,任务调度,failover

    supervisor:

    守护进程,负责运行或者关闭worker。

    worker

    worker是运行在supervisor节点上,实际干活的进程。topology运行多个worker,每个worker承担部分任务。

    task

    jstorm的执行单元,一个task对应一个线程,task各节点进行group。

    slot

    cpu的资源分为四种:cpu,memory,disk,port, 一个worker消费一个port,一个task消费一个cpu slot和memory slot

    receiver

    task内部线程:反序列化queue中的数据,并放入queue中。

    executor ###:

    该queue对于executor可见。

    transfer ###:

    根据接收方是否在同一个worker:决定emit的数据要不要不序列化。不在一个worker,则序列化,网络发送
    worker之间数据传输采用netty通信。

    批处理:按时间或者数量进行cache,批量处理

    Disruptor

    解决多线程之间传递数据,比如receive和executor之间。

    经典解决方案是,BlockingQueue来put和take。阻塞访问。

    Disruptor采用RingBuffer设施来协调多线程共享数据。
    高性能的原因:lazySet 保证可见,stores-store barrier。

    acker机制

    保证数据的处理完整性,
    spout发送完,发送一条acker消息给acker线程,每个bolt处理完都要acker下,发送一个异或值给acker。当acker线程收到所有的acker值后,把所有值
    发送给spout,spout根据所有acker值进行求异或,如果为0则所有几点都处理完。

    问题1:

    jstorm processlaucher 
    在执行 system.out.println 阻塞****
    解决办法:
    应为properties太长,注释掉
    

    问题2:

    log4j 与 log4j-over-slf4j
    
    解决办法:
    冲突 用exclude-jars 排掉冲突jar log4j-over-slf4j
    

    wget http://10.4.65.35:8080/hdpSoftware/rocketmq-mysql-pack.tar.gz

    jstorm jar rocketmqToDiamond-1.0-SNAPSHOT-jar-online com.lenovo.arcloud.jstorm.DiamondTopology

  • 相关阅读:
    Windows 中 SQLite3 使用(1) -- 配置
    vs中qt的QIcon图标图片加载不上的问题
    VS中QT资源文件qrc加载失败(Q_INIT_RESOURCE)qInitResources_出错
    c++前置声明的一点总结
    Windows 如何在cmd命令行中查看、修改、删除与添加环境变量
    在DLL对话框中截获鼠标按下的消息
    c++跨动态库DLL的内存分配与释放问题
    C++中placement new操作符(经典)
    起底多线程同步锁(iOS)
    AutoLayout框架Masonry使用心得
  • 原文地址:https://www.cnblogs.com/zhulongchao/p/7258769.html
Copyright © 2011-2022 走看看