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 ,可以参考我的另一篇博文:
http://bigcat2013.iteye.com/blog/2175538
第三步:下载apache storm : http://apache.arvixe.com/storm/
之前的项目用过0.9.1版的,现在由于需要用到kafka,所以选择了最新版0.9.3
第四步: 把下载好的压缩包上传到服务器(可以通过WinSCP等)
第五步:使用"tar -xzvf apache-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配置)
启动storm nimbus : sudo nohup ./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,日志输出和自动清理规则~
- 本文来自:Linux教程网