Storm On Yarn部署,stormonyarn部署


Storm是一个实时计算框架,与MapReduce离线计算框架,两者互补,分别可以用来解决不同场景下的问题。Yarn是Hadoop2.0中新引入的资源管理系统。通常情况下,Storm是部署到一个独立的集群中,相比将Storm部署到独立集群,将其部署到Yarn上有以下几个好处:
1)弹性计算资源: 将Storm运行到Yarn上之后,Storm可以和其他应用程序共享整个集群中的资源,并且可以动态地调整它的计算资源。
2)共享底层存储: Storm可与运行在Yarn上的其他框架共享底层的一个HDFS存储系统,可避免多个集群带来的维护成本以及集群之间数据拷贝带来的网络开销和时间延迟。
3)支持多版本:可同时将多个Storm版本运行在Yarn上。

Storm On Yarn主要需要实现两个组件,分别是Client和ApplicationMaster,其中Client的主要作用是将应用程序提交到Yarn上,并与Yarn以及ApplicationMaster交互,处理一些用户发送的命令;而ApplicationMaster主要负责向Yarn申请资源,并与NodeManager通信,以启动任务。Storm ApplicationMaster初始化时,将在同一个Container中启动Storm Nimbus和Storm Web UI两个服务,然后根据启动的Supervisor数目向ResourceManager申请资源,目前的实现,ApplicationMaster将请求一个节点上所有资源然后启动Supervisor服务。

目前较好的Storm On Yarn实现是由Yahoo!公司开源的(https://github.com/yahoo/storm-yarn)

环境要求:
1)安装有Yarn,并且Yarn服务已经开启。
2)JDK7(是指Yarn集群节点上的JDK,必须有JDK7)。

安装前的准备:
下载Storm On Yarn:
wget https://github.com/yahoo/storm-yarn/archive/master.zip
并解压该文件。

编译Storm On Yarn:
编辑Storm On Yarn根目录下(不妨设为$StormYarn)的pom.xml,修改Hadoop版本号,改成对应的版本号。

在Storm On Yarn根目录下运行:
mvn package -DskipTests

进入StormYarn/libstorm.zip,storm0.9.0wip21StormYarn同一目录下(不妨设为$Storm)。

配置启停用户的Storm工作环境:
1)将storm-0.9.0-wip21和storm-yarn-master的bin添加到Path环境变量。
vi ~/.bashrc
export PATH=PATH:Storm/bin:StormYarn/binexportPATH=PATH:Hadoop_Home/bin (这句非常重要,StormOnYarn会根据环境变量的配置去访问具体的Hadoop集群,具体说是Yarn)
2)添加Storm工程需要的额外jar包,重新将storm-0.9.0-wip21目录压缩成storm.zip,上传到HDFS的指定目录中:
zip -r storm.zip storm-0.9.0-wip21/
hadoop fs -put storm.zip /lib/storm/0.9.0-wip21/

安装并运行Storm:
1)配置storm.yaml文件:
首先将StormYarn/src/main/resources/masterdefaults.yamlStorm/conf/目录下面,并重命名为master.yaml。修改master.yaml,最简易地,只需添加ZooKeeper的集群信息(zookeeper集群节点的host和port)即可:
storm.zookeeper.servers:
- “host0” (横杠后面必须要有一个空格,不能省略)
- “host1”
- “host2”

storm.zookeeper.port: 2181  (端口号根据具体情况而定,冒号后面必须有个空格,不能省略)

如果Hadoop集群是remote的,还需要修storm.yarn.java_home和storm.yarn.yarn_classpath这两个变量,不然StormOnYarn会从本地获取这些信息,很有可能因为路径不对而导致错误。

2)提交运行StormOnYarn,并得到一个ApplicationId:
storm-yarn launch $Storm/conf/master.yaml
运行这条命令之后就会在终端看到一个Storm的ApplicationMaster的appid。

Storm提交任务:
1)提一次提交任务之前,需要获取storm的集群配置信息:
storm-yarn getStormConfig -appId application_xxx_xxx -output ~/.storm/storm.yaml
运行这条命令之后就可以从storm.yaml看到集群的信息,包括nimbus的host。
2)提交Topology:
storm jar $StormYarn/lib/storm-starter-0.0.1-SNAPSHOT.jar storm.starter.WordCountTopology WordCountTopology -c nimbus=
3)监控Storm:
查看Storm UI,地址是:http://:7070

部署过程中常见的错误:
1)从container-launch抛出的异常,exitCode: 127
这通常是因为Hadoop集群的JAVA_HOME没有配置正确,需要JDK7。比较容易出错的地方在于这里说的JAVA_HOME是指集群节点的JAVA_HOME不是本地的,如果启停用户就在集群节点上,只配置本地JAVA_HOME是没有关系的,但是如果启停用户在集群外,还需要另外设置storm.yarn.java_home这个变量,不然StormOnYarn会从本地获取JAVA_HOME路径,通过本地的JAVA_HOME路径在集群节点上寻找JDK,很显然非常容易因为路径不对而出错。
2)超过虚拟内存的限制:
解决这个错误通常需要调整ApplicationMaster Container的大小:master.container.size-mb。

StormYarn客户端的命令格式:
storm-yarn [command] -appId [appId] [-output] [file] [-supervisors[n]]
其中一些常用的命令如下所示:

Command
参数含义
setStormConfig
重置集群配置,集群重新启动
getStormConfig
获取当前集群配置,Json格式。
addSupervisors
增加supervisor个数
startNimbus/stopNimbus
启动、停止Nimbus
startUI/stopUI
启动停止Web UI
startSupervisors/stopSupervisors
启动停止所有supervisor
shutdown
关闭集群

相关内容

    暂无相关文章