(一)什么是Storm?Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。这是管理队列及工作者集群的另一种方式。 Storm也可被用于“连续计算”(continuous computation),对数据流做连续查询,在计算时就将结果以流的形式输出给用户。它还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。 Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm用于实时处理,就好比 Hadoop 用于批处理。Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。更棒的是你可以使用任意编程语言来做开发。
举例:自来水厂处理自来水
① 离线计算
离线计算:批量获取数据、批量传输数据、周期性批量计算数据、数据展示
代表技术:Sqoop批量导入数据、HDFS批量存储数据、MapReduce批量计算、Hive
② 流式计算
流式计算:数据实时产生、数据实时传输、数据实时计算、实时展示
代表技术:Flume实时获取数据、Kafka/metaq实时数据存储、Storm/JStorm实时数据计算、Redis实时结果缓存、持久化存储(mysql)。
一句话总结:将源源不断产生的数据实时收集并实时计算,尽可能快的得到计算结果
① Storm与Hadoop的区别
Storm用于实时计算
Hadoop用于离线计算
Storm处理的数据保存在内存中,源源不断
Hadoop处理的数据保存在文件系统中,一批一批
Storm的数据通过网络传输进来
Hadoop的数据保存在磁盘中
Storm与Hadoop的编程模型相似
(*)离线计算:MapReduce和Spark Core, 数据的批量处理(Sqoop-->HDFS-->MR(SparkCore)--->HDFS) (*)流式计算:Storm和Spark Streaming, 数据的实时性 (Flume-->Kafka-->Storm(SparkStreaming)-->Redis )
Nimbus:负责资源分配和任务调度。Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。通过配置文件设置当前supervisor上启动多少个worker。Worker:运行具体处理组件逻辑的进程。Worker运行的任务类型只有两种,一种是Spout任务,一种是Bolt任务。Executor:Storm 0.8之后,Executor为Worker进程中的具体的物理线程,同一个Spout/Bolt的Task可能会共享一个物理线程,一个Executor中只能运行隶属于同一个Spout/Bolt的Task。Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,不同spout/bolt的task可能会共享一个物理线程,该线程称为executor。
Storm也是主从结构,存在单点故障问题 ----> 实现HA(借助ZooKeeper)
[前提]:安装ZooKeeper并且启动zkServer.sh start
下载storm包并传到~/tools目录:apache-storm-1.0.3.tar.gz
进入~/tools目录,解压安装: #tar -zxvf apache-storm-1.0.3.tar.gz -C ~/training/设置storm环境变量:#vi ~/.bash_profile添加如下信息:
## ZK 3.4.10 ##确保ZK已经安装ZOOKEEPER_HOME=/root/training/zookeeper-3.4.10export ZOOKEEPER_HOME
PATH=$ZOOKEEPER_HOME/bin:$PATHexport PATH
## Storm ###STORM_HOME=/root/training/apache-storm-1.0.3export STORM_HOME
PATH=$STORM_HOME/bin:$PATHexport PATH
4.环境变量生效:#source ~/.bash_profile
bigdata111编辑配置文件:vim /root/training/apache-storm-1.0.3/conf/storm.yaml [注意:_ 和:配置信息和后面的信息中间有一个空格,如果没有配置会出错,切记]
storm.zookeeper.servers: - "bigdata111"
nimbus.seeds: ["bigdata111"]
storm.local.dir: "/root/training/apache-storm-1.0.3/tmp"
supervisor.slots.ports: - 6700 - 6701 - 6702 - 6703
在bigdata111上启动命令:
启动主节点#storm nimbus &启动从节点#storm supervisor &启动UI#storm ui &WED访问地址http://ip:8080
WEB信息如下:可以看到只有1个主节点(nimbus),1个从节点(supervisor),4个worker(slots)
简单的全分布模式至少需要3台机器,1主2从。这里使用bigdata112,bigdata113,bigdata114作为【主从从】环境。
下面是实际环境:leader:bigdata114,follower:bigdata112,bigdata113.
apache-storm-1.0.3.tar.gz
进入~/tools目录,解压安装: #tar -zxvf apache-storm-1.0.3.tar.gz -C ~/training/设置storm环境变量:#vi ~/.bash_profile添加如下信息:
## Storm ###STORM_HOME=/root/training/apache-storm-1.0.3export STORM_HOME
PATH=$STORM_HOME/bin:$PATHexport PATH
环境变量生效:#source ~/.bash_profile
storm.zookeeper.servers: - "bigdata112" - "bigdata113" - "bigdata114"
nimbus.seeds: ["bigdata112"]storm.local.dir: "/root/training/apache-storm-1.0.3/tmp"supervisor.slots.ports: - 6700 - 6701 - 6702 - 6703
将配置好的storm复制到其他节点
#scp -r apache-storm-1.0.3/ root@bigdata113:/root/training/#scp -r apache-storm-1.0.3/ root@bigdata114:/root/training/
启动主从节点 bigdata112主节点开启#storm nimbus &
#storm ui &
bigdata113从节点开启#storm supervisor &bigdata114从节点开启#storm supervisor &
访问主节点的WEB信息:http://192.168.205.112:8080
HA的环境基于上面的集群配置,将bigdata113作为bigdata112的备份主节点。因此HA的实际环境信息:
主节点bigdata112主节点_备份bigdata113从节点1bigdata113从节点2bigdata114
HA环境是基于集群环境的配置,在配置HA之前,将集群环境的进程全部关闭。查看主从节点的进程,关闭如下进程:
主节点关闭:nimbus
从节点关闭:supervisor
增加一个主节点:nimbus.seeds: ["bigdata112", "bigdata113"]
启用Event Logger 可以查看处理的数据:"topology.eventlogger.executors": 1
将配置好的storm复制到其他节点
#scp -r apache-storm-1.0.3/ root@bigdata113:/root/training/ #scp -r apache-storm-1.0.3/ root@bigdata114:/root/training/
启动主从节点
bigdata112主节点开启#storm nimbus &
#storm ui &
#storm logviewer &
bigdata113主节点开启#storm nimbus &
#storm ui &
#storm logviewer &
bigdata113从节点开启#storm supervisor &
bigdata114从节点开启#storm supervisor &
#storm logviewer &
启动后主从节点的进程信息如下:
bigdata112_4进程:nimbus,core,QuorumPeerMain(zookeeper进程),logviewer
bigdata113_5进程:nimbus,supervisor,core,QuorumPeerMain(zookeeper进程),logviewer
bigdata114_3进程:supervisor,QuorumPeerMain(zookeeper进程),logviewer
主节点bigdata112 WEB: http://bigdata112:8080
主节点bigdata113 WEB: http://bigdata113:8080
》查看bigdata112 WEB此时显示2个主节点,一个是leader,一个是not a leader。
》查看bigdata112的进程并关闭nimbus进程:
》再次查看WEB页面:此时bigdata切换成主节点
》再次启动bigdata112的nimbus进程,查看WEB:bigdata113任然为leader,bigdata112此时not a leader。
Storm自带了很多的例子可供我们进行实时计算演示,Example位置:/root/training/apache-storm-1.0.3/examples/storm-starter/storm-starter-topologies-1.0.3.jar。
bigdata112:
查看例子中的readme介绍用法:cat README.markdown
运行:storm jar ***.jar 任务Topology的类 别名#storm jar storm-starter-topologies-1.0.3.jar org.apache.storm.starter.WordCountTopology MyWCTopology
任务在没有人为打断的情况下会一直运行,此时查看主节点的WEB,显示的任务信息:参考storm的体系架构:worker=slots,一个worker可以包含多个executors,executors是单线程的,所以executors=tasks.
》点击主节点页面的topology任务名称,进入任务的详细页面:
》topology任务详细页面:
》在topology任务详情页,开启Debug功能,然后查看spout和bolts任务的详情
》开启debug模式并设置采样率之后,查看具体的spout和bolts任务采样详情页:
》点击采样的任务为spout,页面跳转到新页面,点击events按钮:
》关闭topology任务
使用zookeeper查看器,连接bigdata112,查看保存的storm的HA任务信息(HA任务信息比较多):
转载于:https://www.cnblogs.com/forfreewill/articles/9088503.html
相关资源:《浅析Storm流式计算框架》的课件