下載
從github上下載storm-yarn的源碼
編譯
前提需要安裝好JDK和Maven,解壓storm-yarn-master.zip,並修改pom.xml中storm和hadoop版本
<properties>
<storm.version>0.9.0</storm.version>
<hadoop.version>2.5.0-cdh5.3.0</hadoop.version>
</properties>
注:這裏一定要注意,通過https://clojars.org/repo/storm這個repository發現storm-core和storm-netty這兩個依賴庫的版本只發布到了0.9.0.1,所以將storm下降到了0.9.0。
因爲我這裏使用的是cloudera的Hadoop,所以添加上maven的repository
<repository>
<id>cdh.repo</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
<name>Cloudera Repositories</name>
</repository>
使用maven編譯源碼
$ mvn clean package -DskipTests
部署
解壓縮storm.zip,這個storm.zip是在storm-yarn-master/lib目錄下,其實這個storm.zip只是一個軟連接,指向的是storm-0.9.0-wip21.zip
$ unzip storm.zip
配置storm-yarn-master和storm-0.9.0-wip21的bin到系統的環境變量中
# STORM_YARN_HOME
export STORM_YARN_HOME=/home/hadoop/compile/storm-yarn-master
export PATH=$PATH:$STORM_YARN_HOME/bin:$STORM_YARN_HOME/lib/storm-0.9.0-wip21/bin
記得使配置的環境變量生效
$ source /etc/profile
添加Storm工程需要的額外Jar包到storm-0.9.0-wip21的lib下,比如MySQL的驅動jar包之類的,重新壓縮成storm.zip文件,上傳至HDFS的指定目錄中(非常重要,集羣中通過訪問hdfs中的storm.zip獲取工作環境) ,進入【/home/hadoop/compile/storm-yarn-master/lib】目錄下
$ zip -r storm.zip storm-0.9.0-wip21
$ hdfs dfs -mkdir -p /lib/storm/0.9.0-wip21/
$ hdfs dfs -put storm.zip /lib/storm/0.9.0-wip21/
運行
修改【/opt/modules/storm-yarn-master/lib/storm-0.9.0-wip21/conf】目錄下的storm.yaml,這裏只修改了zookeeper的地址:
storm.zookeeper.servers:
- "hadoop-yarn01.dimensoft.com.cn"
- "hadoop-yarn02.dimensoft.com.cn"
- "hadoop-yarn03.dimensoft.com.cn"
提交storm到yarn
$ storm-yarn launch conf/storm.yaml
通過YARN的界面查看,作業執行報錯:
15/10/13 16:22:34 ERROR auth.ThriftServer: ThriftServer is being stopped due to: org.apache.thrift7.transport.TTransportException: Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9000.
org.apache.thrift7.transport.TTransportException: Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9000.
at org.apache.thrift7.transport.TNonblockingServerSocket.<init>(TNonblockingServerSocket.java:89)
at org.apache.thrift7.transport.TNonblockingServerSocket.<init>(TNonblockingServerSocket.java:68)
at org.apache.thrift7.transport.TNonblockingServerSocket.<init>(TNonblockingServerSocket.java:61)
at backtype.storm.security.auth.SimpleTransportPlugin.getServer(SimpleTransportPlugin.java:47)
at backtype.storm.security.auth.ThriftServer.serve(ThriftServer.java:52)
at com.yahoo.storm.yarn.MasterServer.main(MasterServer.java:175)
這是因爲部署storm-yarn的節點運行了CM Server和CM Server db,導致9000端口號已經被佔用了,Storm ApplicationMaster初始化時,將在同一個Container中啓動Storm Nimbus和Storm Web UI兩個服務,然後根據待啓動的Supervisor數目向ResourceManager申請資源,在目前實現中,ApplicationMaster將請求一個節點上所有資源然後啓動Supervisor服務,也就是說,當前Supervisor將獨佔節點而不會與其他服務共享節點資源,這種情況下可避免其他服務對Storm集羣的干擾。 除了運行Storm Nimbus和Web UI外,Storm ApplicationMaster還會啓動一個Thrift Server以處理來自YARN-Storm Client端的各種請求,在此不再贅述。直接在storm.yaml中添加配置修改thrift端口號。
master.thrift.port: 9002
再次提交一遍成功,查看YARN Web UI
直接通過YARN的Web UI查看該job在哪個節點運行,該節點就是Storm集羣的UI節點,例如:192.168.100.154節點,那麼Storm的UI就是
可以使用的command
$ storm-yarn [command] –appId [appId] –output [file] [–supervisors [n]]
其中,Command爲具體命令,具體見下表,參數“-appId”爲啓動的Storm的應用程序Id,“-supervisors”爲需增加的Supervisor服務個數,該參數只對命令“addSupervisors”有效