Apache Storm 是 Apache 基金会的开源的分布式实时计算系统。与 Hadoop 的批处理相相似,Storm 能够对大量的数据流进行可靠的实时处理,这一过程也称为“流式处理”,是分布式大数据处理的一个重要方向。Storm 支持多种类型的应用,包括:实时分析、在线机器学习、连续计算、分布式RPC(DRPC)、ETL等。Strom 的一个重要特色就是“快速”的数据处理,有 benchmark 显示 Storm 可以达到单个节点每秒百万级 tuple 处理(tuple 是 Storm 的最小数据单元)的速度。快速的数据处理、优秀的可扩展性与容错性、便捷的可操做性与维护性、活跃的社区技术支持,这就是 Storm。java
Storm 集群组件git
Storm 集群中包含两类节点:主控节点(Master Node)和工做节点(Work Node)。其分别对应的角色以下:github
Nimbus 和 Supervisor 节点之间全部的协调工做是经过 Zookeeper 集群来实现的。此外,Nimbus 和 Supervisor 进程都是快速失败(fail-fast)和无状态(stateless)的;Storm 集群全部的状态要么在 Zookeeper 集群中,要么存储在本地磁盘上。这意味着你能够用 kill -9 来杀死 Nimbus 和 Supervisor 进程,它们在重启后能够继续工做。这个设计使得Storm集群拥有难以想象的稳定性。apache
Storm 部署步骤less
搭建一个Storm集群须要依次完成的安装步骤:机器学习
Storm.yaml 配置分布式
Storm发行版本解压目录下有一个conf/storm.yaml文件,用于配置Storm。默认配置能够在这里查看。conf/storm.yaml中的配置选项将覆盖defaults.yaml中的默认配置。如下配置选项是必须在conf/storm.yaml中进行配置的:oop
[注] yaml 文件的配置使用“-”
来表示数据的层次结构,配置项的:
后必须有空格,不然该配置项没法识别学习
集群配置示例以下:测试
########### These MUST be filled in for a storm configuration # storm.zookeeper.servers: # - "server1" # - "server2" storm.zookeeper.servers: - "192.168.9.182" - "192.168.9.185" - "192.168.91.128" storm.zookeeper.port: 2181 # storm's work directory storm.local.dir: "/home/storm/workdir" # nimbus.host: "nimbus" nimbus.host: "192.168.9.185" # supervisor's work ports supervisor.slots.ports: -6700 -6701 -6702 -6703 # #### Netty transport configuration # transmission protocol storm.messaging.transport: "backtype.storm.messaging.netty.Context" # server's work threads number storm.messaging.netty.server_worker_threads: 1 # client's work threads number storm.messaging.netty.client_worker_threads: 1 # buffer size storm.messaging.netty.buffer_size: 5242880 # max retry times storm.messaging.netty.max_retries: 100 # max waiting time(ms) storm.messaging.netty.max_wait_ms: 1000 # min waiting time(ms) storm.messaging.netty.min_wait_ms: 100 ## JVM parameters can be configured here nimbus.childopts: "-Xloggc:/home/enjoyor/storm/apache-storm-0.9.3/logs/nimbusGC.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps" supervisor.childopts: "-Xloggc:/home/enjoyor/storm/apache-storm-0.9.3/logs/nimbusGC.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps" worker.childopts: "-Xloggc:/home/enjoyor/storm/apache-storm-0.9.3/logs/nimbusGC.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps"
Storm 运行
和Zookeeper同样,Storm也是快速失败(fail-fast)的系统,这样Storm才能在任意时刻被中止,而且当进程重启后被正确地恢复执行。这也是为何Storm不在进程内保存状态的缘由,即便Nimbus或Supervisors被重启,运行中的Topologies不会受到影响。如下是启动Storm各个后台进程的方式:
至此,Storm集群已经部署、配置完毕,能够向集群提交拓扑运行了。
向Storm 集群提交任务
storm jar allmycode.jar org.me.MyTopology arg1 arg2 arg3
其中,allmycode.jar 是包含 Topology 实现代码的 jar 包,org.me.MyTopology 的 main 方法是 Topology 的入口,arg一、arg2 和 arg3 为 org.me.MyTopology 执行时须要传入的参数。
2. 中止 Storm Topology:
storm kill {toponame}
其中,{toponame} 为 Topology 提交到 Storm 集群时指定的 Topology 任务名称。