在单机上安装了storm并成功运行wordcount后,进入本周工作的下一步:熟悉storm on yarn. 熟悉的第一步还是安装和部署。
已有的环境:三台服务器,hadoop01/hadoop02/hadoop03,已经安装好了hadoop 2.2.0版本,有yarn环境和hdfs环境。
需要的软件与配置:
1) 安装storm的依赖包zeromq与jzmq,详细参见 http://blog.youkuaiyun.com/flyhighzy/article/details/37672119
2)storm-on-yarn源码包以及maven(用于编译storm-on-yarn)
3) storm的工作环境
具体细节可参考 http://www.tuicool.com/articles/BFr2Yv
其中遇到的问题:
1)在提交storm到yarn上运行时,出现错误“Can not find storm home entry", 经过查找,原因是storm文件夹的命名问题,我下载的0.9.2-incubating版本,命名为apache-storm-{version},而打包成storm.zip时会查找storm-{version}的文件夹,这样会导致找不到,因此把storm文件夹重命名后再打包就可以了。
参考:https://github.com/yahoo/storm-yarn/issues/68
2)第一次提交storm到yarn上时,对storm.yaml配置文件只设置storm.zookeeper.servers和nimbus.host两个选项,然后发现在yarn上storm这个应用一直处于accept而不进入到running状态,因此猜想可能是自己的集群比较小,内存也不够多,而storm默认container的内存需求较大,因此yarn不能为它分配足够大的container导致storm不能开始运行。于是在storm.yaml中加入 master.initial-num-supervisors和 master.container.size-mb两个参数进行限制,再重新打包成storm.zip提交,于是这次成功运行了^_^
3)jdk一定要使用1.7以上的版本,否则会有不兼容的问题。这个问题在storm-yarn项目的readme中也写了需要jdk7,当时没注意看,枉费了一些时间,实在不值得。
目前的进展:
storm能够提交到yarn环境中运行,但还不能提交storm的任务到storm-on-yarn的应用上运行,目前跑wordcount时会有以下错误:
Exception in thread "main" java.lang.RuntimeException: org.apache.thrift7.transport.TTransportException: java.net.ConnectException: Connection refused
at backtype.storm.utils.NimbusClient.getConfiguredClient(NimbusClient.java:38)
另外打开storm-ui时也会有connection refused的错误,这个问题仍有待解决。
小结:
通过安装与部署,体会到storm是作为一个应用会长期跑在yarn上,storm-yarn主要实现两部分,client和ApplicationMaster,client用于提交和管理storm应用,AM则负责storm内部的Nimbus, supervisor等server的初始化与逻辑控制。那么JStorm-on-YARN也可以采取类似的结构。
=============================7.17更新=========================================================
昨天的错误查看日志后发现实际错误为:
Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
经过google发现是zookeeper没有启动,因为之前的hadoop集群并没有单独安装启动zookeeper。启动后再提交Topology,可正常运行。
下一步工作:
对比storm与JStorm的异同,设计JStorm on YARN的实现