大数据基础之storm
前置条件
storm 1.1.1
zookeeper,分布式协调服务,HA。
kafka和logstash的整合
1 | kafka-server-start.sh -daemon /home/hadoop/app/kafka_2.11-0.9.0.0/config/server.properties |
logstash2.4.1
file_kafka.conf
1 | input { |
./bin/logstash -f file_kafka.conf
架构和部署
主:nimbus,task的指派和分发、资源的分配
从:supervisor,执行任务的具体部分。启动和停止多个worker(配置指定)。一个topology可以运行在多个worker上,也可以通过配置来指定
主从是无状态的,元数据存放在zk中。
worker:运行具体组件逻辑(Spout & Bolt)的进程
=================
task:Spout和Bolt中的每一个线程
executor:Spout和Bolt可能共享一个线程
Nimbus从1.0.0是HA的了。
编辑conf/storm-env.sh
导出JAVA_HOME。
1 | # zk |
通过访问storm web ui可以发现启动了2个nimbus,主要是为了HA。
提交任务
1 | storm jar ~/lib/storm-1.0.jar io.github.ClusterSumStormTopology |
1 | # 查看正在运行的topology |
并行度
- 一个worker进程执行的是一个topo的子集
- 一个worker进程会自动1-n个Executor线程来执行一个topo的component
- 一个运行的topo就是由集群中的多台物理机上的多个worker进程组成
executor是一个被worker进程启动的单独线程,每个executor只会运行1个topo的1个component
task是最终运行spout或者bolt的最小执行单元
默认:
一个supervisor节点启动4个worker进程,启动4个slots(supervisor.slots.ports)。
每个topo默认启动一个worker进程
每个worker进程会启动一个executor
每个executor启动一个task
提交作业之后执行jps -l
1 | 7207 org.apache.storm.ui.core |
分组策略
A Stream grouping defines how that stream should be partitioned among the bolt’s tasks.
DRPC
常见的序列化方式avro,thrift