Apache storm 是一个由twitter开源的大数据处理系统,与其他系统不同的是,storm旨在用于分布式实时处理并且与语言无关。笔者所认知的storm使用场景诸 如 实时日志分析、网站用户行为实时分析、实时计算等,目前很多公司也都把storm作为自己的大数据架构的一部分,来实现一些实时业务的处理。

相信大家都和我有一样的认知,那就是现在的技术都是项目驱动模式,没有最好的技术,只有最适合自己项目的技术。下面先跟大家分享一下我对storm的一些简单了解:

storm的优点

1.简单的编程模型,类似于MapReduce降低了并行批处理的复杂性,storm降低了进行实时处理的复杂性。

2.支持各种语言,你可以在storm上使用Java、Ruby、Clojure和Python,如果想增加一个新的语言支持,你只需要实现一个简单的storm通信协议即可。

3.容错性,storm会管理工作进程和节点的故障。

4.水平拓展,计算是在多个线程,进程和服务器之间并行进行的。

5.可靠的消息处理,storm保证每个消息至少得到一次完整的处理,任务失败时,storm会尝试从消息源重新发射。

6.快速,系统的设计保证了消息能够快得到快速处理,storm使用的ZeroMQ作为其底层的消息队列。

7.本地模式,这个对开发者来说无疑是方便了很多,可以在本地模拟集群环境进行开发和测试。

storm目前存在的问题:

1.目前的开源版本中只有单节点的Nimbus,挂掉之后只能自动去重启,对系统来说有一定的风险,可以考虑双节点nimbus布局。

2.Storm的一部分核心代码是由Clojure编写,clojure是一个在JVM上运行的动态函数式编程语言,优势在于流程计算,虽然性能上提高不少但是同时也提升了维护成本。

 

介绍说了一大堆,下面就简单的搭建一个storm的集群环境:

准备环境: 至少三台Linux server(笔者用了5台 cloud server for linux redhat edition)

 

集群搭建:

第一步:安装JDK/JRE

第二步:安装 zookeeper ,可以参考我的另一篇博文: 

第三步:下载apache storm : 

之前的项目用过0.9.1版的,现在由于需要用到kafka,所以选择了最新版0.9.3

第四步: 把下载好的压缩包上传到服务器(可以通过WinSCP等)

第五步:使用"tar -xzvf  -storm-0.9.3.tar.gz" 解压压缩包

解压后的目录结构:

\
 
第六步:修改storm配置文件(/conf/storm.yaml)

基本的需要配置 storm.zookeeper.servers、nimbus.host、storm.local.dir、ui.port、 supervisor.slots.ports几个属性,这里需要注意的是nimbus不需要配置supervisor.slots.ports属 性,supervisor不需要配置ui.port属性,因为nimbus是主节点,有ui没有worker,supervisor是工作节点,没有ui 只有worker:

common:

\
 

nimbus:

\

 

supervisor(每个supervisor的worker数目可以通过增减slots的数量调整):

\
 

注:配置信息不要顶格写,不然启动的时候会报错找不到属性值。

 

第七步:通过”scp -r“把配置好的storm目录copy到其他的server上(注:如果你当前的server配置为nimbus,其他的server就都按照上述的supervisor配置方法配置storm.yaml)

\
 
第八步:在集群的上分别创建storm的本地目录(对应storm.yaml中的storm.local.dir配置)

第九步:启动zookeeper,然后启动sto集群

启动storm nimbus :   ./bin/storm nimbus > /dev/null &

启动storm UI :sudo nohup ./bin/storm ui > /dev/null &

启动supervisor: sudo nohup ./bin/storm supervisor > /dev/null &

 

通过配置的nimbus地址+ui.port的属性值可以访问storm的UI,监测storm的运行状态。

 

按照上述简单的配置之后,storm集群就可以搭建起来了,读者可以根据自己的项目需要做额外的配置,另外可以在/logback/cluster.xml中配置log4j,输出和自动清理规则~

    • 本文来自: