Storm的安装与使用

详细安装教程可参看厦大林子雨老师著作:http://dblab.xmu.edu.cn/blog/767/

三大计算系统

  • hadoop :离线的复杂计算。
  • spark:离线的快速计算。
  • storm:流式实时计算。
离线复杂计算:批量获取数据、批量传输数据、周期性批量计算数据、数据展示
代表技术:Sqoop批量导入数据、HDFS批量存储数据、MapReduce批量计算数据、Hive批量计算数据、zookeeper任务调度。
流式计算:数据实时产生、数据实时传输、数据实时计算、实时展示
代表技术:Flume实时获取数据、Kafka/metaq实时数据存储、Storm/JStorm实时数据计算、Redis实时结果缓存、持久化存储(mysql)。
离线快速计算:基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合,如pageRank、K-Means等算法(淘宝使用spark)
代表技术:RDD,GraphX 、 SparkSQL、 SparkStreaming 、 MLlib,Spark更适合于迭代运算比较多的ML和DM运算。

1.storm组件:

Nimbus:负责资源分配和任务调度。
Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。通过配置文件当前supervisor上启动多少个worker。
Worker:运行具体处理组件逻辑的进程。Worker运行的任务类型只有两种,一种是Spout任务,一种是Bolt任务。
Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,不同spout/bolt的task可能会共享一个物理线程,该线程称为executor。

2.storm编程模型

Topology:Storm中运行的一个实时应用程序的名称。(拓扑)
(喷口)Spout:在一个topology中获取源数据流的组件。通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的源数据。
(螺栓)Bolt:接受数据然后执行处理的组件,用户可以在其中执行自己想要的操作。
Tuple:一次消息传递的基本单元,理解为一组消息就是一个Tuple。
Stream:表示数据的流向。
StreamGrouping:数据分组策略
    7种:shuffleGrouping(Random函数),Non Grouping(Random函数),FieldGrouping(Hash取模)、Local or ShuffleGrouping 本地或随机,优先本地。

3.架构

Nimbus:任务分配
Supervisor:接受任务,并启动worker。worker的数量根据端口号来的。
Worker:执行任务的具体组件(其实就是一个JVM),可以执行两种类型的任务,Spout任务或者bolt任务。
Task:Task=线程=executor。 一个Task属于一个Spout或者Bolt并发任务。属于某个组件并发度中一个,本质是一个线程
Zookeeper:保存任务分配的信息、心跳信息、元数据信息。

4.Worker与topology(拓扑)

一个worker只属于一个topology,每个worker中运行的task只能属于这个topology。
反之,一个topology包含多个worker,其实就是这个topology运行在多个worker上。
一个topology要求的worker数量如果不被满足,集群在任务分配时,根据现有的worker先运行topology。
如果当前集群中worker数量为0,那么最新提交的topology将只会被标识active,不会运行,只有当集群有了空闲资源之后,才会被运行。

5.如何指定驱动类中每个组件的并发度数量?如何设置worker数

1.根据上游的数据量来设置spout的并发度
2.根据业务复杂度和execute方法执行时间来设置bolt并发度
3.根据集群可用资源配置,一般情况下70%的资源使用率
4.worker数量理论上根据程序并发度总的task数量均分,实际中反复调整

6.ack-fail机制

1.需要ack-fail时,为每个tuple生成一个messageid,这个messageid用来标识tuple,当该tuple完全被处理,storm框架会调用
spout的ack方法,否则调用fail,消息是否重发,自己处理
2.在spout有并发度的情况下,storm会根据tuple最开始的所属的spout taskid,通知相应的spouttask
3.在流式计算中topology的bolt组件是可以配置多个的,每个环节中,都需要bolt组件显式告诉storm框架,自己对当前tuple处理完成

安装:

wget http://mirrors.tuna.tsinghua.edu.cn/apache/storm/apache-storm-0.9.7/apache-storm-0.9.7.tar.gz
tar -zxvf apache-storm-0.9.7.tar.gz
安装在 /usr/local

conf下storm.yaml 修改配置文件
storm.zookeeper.servers:
- “Master1”
- “Slave1”
- “Slave2”
nimbus.host: “Master”
storm.local.dir: “/usr/local/storm/data” 配置storm存储少量文件的路径

启动:
1.主控节点下:(nohup ./storm nimbus &)?
bin目录下  ./storm nimbus(启动服务),./storm ui(启动管理界面)

2.子节点下:
bin目录下  ./storm supervisor
后台方式运行 ./storm nimbus &

3.如果启动后,supervisor自己退出,应该与Storm.local.dir设定的目录有关。
如果目录不存在的话,启动后会自动退出。我记得当时代码为
Exit 13                 bin/storm supervisor
如果关闭再重新启动storm时,有时也会出现这样的情况。
Exit 20                 bin/storm supervisor

问题:
1.集群如何启动,任务如何执行

java -server nimubs, supervisor
client—>createTopology(序列化)—>提交jar到nimbuinbox—>nimbus分配任务(task总数/work数)–写到zk
启动worker<—识别自己的任务<–supervisor—>watch—–zk
启动spout/bolt—-taskinfo<—-worker—>zk

1.2.集群架构中各个模块如何启动
nimbus:用户启动
supervisor:用户启动
worker:supervisor启动
task:worker启动
2.集群如何通信
集群架构中各个模块如何通信?外部
拓扑程序中各task如何通信?内部

错误:

org.apache.thrift7.transport.TTransportException: java.net.ConnectException: Connection refused(拒绝连接)
我是因为storm.yaml配置信息加了 # 等于注释掉了。。。注意配置文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值