批处理与流式处理区别


应用场景例子 


Storm介绍
    Storm是个 实时 的、分布式以及具备高容错的计算系统
    Storm进程常驻内存
    Storm数据不经过磁盘,在内存中处理

    官网: http://storm.apache.org/
    Twitter开源的分布式实时大数据处理框架,最早开源于github
    2013年,Storm进入Apache社区进行孵化
    2014年9月,晋级成为了Apache顶级项目
    国内外各大网站使用,例如雅虎、阿里、百度

架构
    角色
        
            Nimbus
                    资源调度
                    任务分配
                    接收jar包
            Supervisor
                    接收nimbus分配的任务
                    启动、停止自己管理的worker进程(当前supervisor上worker数量由配置文件设定)
            Worker
                    运行具体处理运算组件的进程(每个Worker对应执行一个Topology的子集)
                    worker任务类型,即spout任务、bolt任务两种
                    启动executor
                    (executor即worker JVM进程中的一个java线程,一般默认每个executor负责执行一个task任务)
            Zookeeper
                    监控节点心跳,与task执行情况
 
  编程模型
            DAG (Topology) -- 有向无环图
            Spout                        -- 数据读取传递源
            Bolt                           -- 数据处理中间节点
            详细介绍:Storm 计算模型   
    数据传输
            ZMQ
                    ZeroMQ 开源的消息传递框架,并不是一个MessageQueue
            Netty
                    Netty是基于NIO的网络框架,更加高效。
                   (之所以Storm 0.9版本之后使用Netty,是因为ZMQ的license和Storm的license不兼容。)
    Storm架构设计与Yarn架构对比
    

优点
    高可靠性
            异常处理
            消息可靠性保障机制
    可维护性
            StormUI 图形化监控接口
            

流式处理
1、异步
    客户端提交数据进行结算,并不会等待数据计算结果
    场景
        逐条处理
                例:ETL
        统计分析
               例:计算PV、UV、访问热点 以及 某些数据的聚合、加和、平均等
                       客户端提交数据之后,计算完成结果存储到Redis、HBase、MySQL或者其他MQ当中,
                       客户端并不关心最终结果是多少。
                
2、同步
    
客户端提交数据请求之后,立刻取得计算结果并返回给客户端
    场景
        Drpc
        实时请求处理
                例:图片特征提取
                


Storm 对比 MapReduce
    Storm
            进程、线程常驻内存运行,数据不进入磁盘,数据通过网络传递。
    MapReduce
            为TB、PB级别数据设计的批处理计算框架。
    

Storm 对比 SparkStreaming
    Storm 纯流式处理
            专门为流式处理设计
            数据传输模式更为简单,很多地方也更为高效
            并不是不能做批处理,它也可以来做微批处理,来提高吞吐
    Spark Streaming微批处理
            将RDD做的很小来用小的批处理来接近流式处理
            基于内存和DAG可以把处理任务做的很快
    Storm是纯实时的,SparkSteaming是微批处理,微批处理效率更高吞吐量更大
    Storm对于事务支持要比SparkStreaming要好
            对于流式处理框架,事务就是数据恰好处理一次,
            对于对数据安全要求的如银行,选用storm
    Storm支持动态的资源扩展,SparkSteaming不支持
            即动态对节点性能调整,高峰时加强,低峰时降低
    SparkStreaming中可以使用sql语句来处理数据,Storm无法实现
    Storm适合简单的汇总型计算,SparkStreaming适合复杂的数据处理
    

Storm 本地目录树


Storm Zookeeper目录树



Storm部署
一、环境要求
    JDK 1.6+
        java -version
    Python 2.6.6+
        python -V
    ZooKeeper3.4.5+
    storm 0.9.4+
二、单机模式
    上传解压
tar xf apache-storm-0.9.4.tar.gz 
cd apache-storm-0.9.4
mkdir logs
./bin/storm --help
    下面分别启动ZooKeeper、Nimbus、UI、supervisor、logviewer
./bin/storm dev-zookeeper >> ./logs/zk.out 2>&1 &
./bin/storm nimbus >> ./logs/nimbus.out 2>&1 &
./bin/storm ui >> ./logs/ui.out 2>&1 &
./bin/storm supervisor >> ./logs/supervisor.out 2>&1 &
./bin/storm logviewer >> ./logs/logviewer.out 2>&1 &
    需要等一会儿
jps

    

    web UI
    提交任务到Storm集群当中运行:
./bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.4.jar storm.starter.WordCountTopology wordcount
./bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.4.jar storm.starter.WordCountTopology test

三、完全分布式安装部署

各节点分配:
                 Nimbus    Supervisor   Zookeeper
node1      1                                           1            
node2                             1                    1            
node3                             1                    1            
    node1作为nimbus
vim conf/storm.yaml
storm.zookeeper.servers:
  - "node1"
  - "node2"
  - "node3"

storm.local.dir: "/tmp/storm"

nimbus.host: "node1"

supervisor.slots.ports:
    - 6700
    - 6701
    - 6702
    - 6703

    在storm目录中创建logs目录

mkdir logs

    集群当中所有服务器,同步所有配置!

    启动ZooKeeper集群

    node1上启动Nimbus

./bin/storm nimbus >> ./logs/nimbus.out 2>&1 &
# 查看日志
tail -f logs/nimbus.log

./bin/storm ui >> ./logs/ui.out 2>&1 &
# 查看日志
tail -f logs/ui.log

    节点node2和node3启动supervisor,按照配置,每启动一个supervisor就有了4个slots

./bin/storm supervisor >> ./logs/supervisor.out 2>&1 &
# 查看日志
tail -f logs/supervisor.log
#(当然node1也可以启动supervisor)
    web界面
        http://node1:8080/
        
    提交任务到Storm集群当中运行:
./bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.4.jar storm.starter.WordCountTopology wordcount
./bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.4.jar storm.starter.WordCountTopology test
    环境变量可以配置也可以不配置
export STORM_HOME=/opt/sxt/storm
export PATH=$PATH:$STORM_HOME/bin

    观察关闭一个supervisor后,nimbus的重新调度,再次启动一个新的supervisor后,观察,并rebalance


添加新评论