批处理与流式处理区别


应用场景例子 


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


添加新评论