1.背景知识

在不修改Storm任何源代码的情况下,让Storm运行在YARN上,最简单的实现方法是将Storm的各个服务组件(包括Nimbus和Supervisor),作为单独的任务运行在YARN上,当前比较有名的“Storm On YARN”实现是由yahoo!开源的,它基本实现了上述描述的功能,下面具体进行说明:
(1) YARN-Storm Client
提供了一系列Shell命令供用户控制YARN上的Storm服务,比如构建一个Storm集群命令如下:
storm-yarn launch <storm-yarn-config>
其中,<storm-yarn-config>是Storm配置信息,包括启动的Supervisor个数、Storm ApplicationMaster占用的内存等。
启动Storm之后,可通过以下命令控制Storm:
storm-yarn [command] -appId [appId] -output [file] [-supervisors [n]]

“-supervisors”为需增加的Supervisor服务个数,该参数只对命令“addSupervisors”有效。

Command

参数含义

setStormConfig

重置集群配置,集群重新启动

getStormConfig

获取当前集群配置,Json格式。

addSupervisors

增加supervisor个数

startNimbus/stopNimbus

启动、停止Nimbus

startUI/stopUI

启动停止Web UI

startSupervisors/stopSupervisors

启动停止所有supervisor

shutdown

关闭集群

(2) YARN-Storm ApplicationMaster

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端的各种请求。

2.安装环境

a. Hadoop 2.2.0
b. jdk1.7.0_60
c. apache-maven-3.0.5

3.Storm on Yarn的安装准备

注意:所有节点上都需要安装storm;可以只安装一个storm on yarn客户端。

a. 从GitHub上下载Storm on Yarn
wget https://github.com/yahoo/storm-yarn/archive/master.zip
b. storm on yarn 需要编译

unzip storm-yarn-master.zip

cd storm-yarn-master

c. Edit pom.xml,修改Hadoop的版本号,改成对应的版本号

<properties>
<storm.version>0.9.0-wip21</storm.version>
<hadoop.version>2.2.0</hadoop.version>
<!--hadoop.version>2.1.0.2.0.5.0-67</hadoop.version-->
</properties>

d.mvn编译

mvn package -DskipTests

编译好后解压storm-yarn-master/lib/storm-0.9.0-wip21.zip,得到 storm-0.9.0-wip21目录。
将得到 storm-0.9.0-wip21 目录移动到 和 storm-yarn-master同级。

/home/ebupt/storm/
|-- storm-0.9.0-wip21
`-- storm-yarn-master


4.配置Storm的工作环境

a. 添加storm-0.9.0-wip21和storm-yarn-master的bin到Path环境变量
vi ~/.bash_profile

export STORM_HOME=$HOME/storm
export PATH=$PATH:$STORM_HOME/storm-yarn-master/bin:$STORM_HOME/storm-0.9.0-wip21/bin

b. 添加Storm工程需要的额外Jar包(storm.zip)。上传至HDFS的指定目录中(非常重要,集群中通过访问hdfs中的storm.zip获取工作环境)

zip -r storm.zip storm-0.9.0-wip21/

hadoop fs –put storm.zip /lib/storm/0.9.0-wip21/

 

5. 安装并运行Storm

a. 修改storm.yaml文件
vi storm-0.9.0-wip21/conf/storm.yaml

storm.zookeeper.servers:
- "eb170"
- "eb171" storm.zookeeper.port: 2182
storm.local.dir: "/home/ebupt/storm/localstorm" supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
- 6704

b. 提交运行storm on yarn,并得到一个ApplicationId
storm-yarn launch ~/storm/storm-0.9.0-wip21/conf/storm.yaml

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/ebupt/eb/hadoop-2.2.0/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/ebupt/eb/storm-yarn/storm-0.9.0-wip21/lib/logback-classic-1.0.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
14/07/04 15:37:45 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
14/07/04 15:37:45 INFO client.RMProxy: Connecting to ResourceManager at eb170/10.1.69.170:8032
14/07/04 15:37:46 INFO yarn.StormOnYarn: Copy App Master jar from local filesystem and add to local environment
14/07/04 15:37:47 INFO yarn.StormOnYarn: Set the environment for the application master
14/07/04 15:37:47 INFO yarn.StormOnYarn: YARN CLASSPATH COMMAND = [[yarn, classpath]]
14/07/04 15:37:47 INFO yarn.StormOnYarn: YARN CLASSPATH = [/home/ebupt/eb/hadoop-2.2.0/etc/hadoop:/home/ebupt/eb/hadoop-2.2.0/etc/hadoop:/home/ebupt/eb/hadoop-2.2.0/etc/hadoop:/home/ebupt/eb/hadoop-2.2.0/share/hadoop/common/lib/*:/home/ebupt/eb/hadoop-2.2.0/share/hadoop/common/*:/home/ebupt/eb/hadoop-2.2.0/share/hadoop/hdfs:/home/ebupt/eb/hadoop-2.2.0/share/hadoop/hdfs/lib/*:/home/ebupt/eb/hadoop-2.2.0/share/hadoop/hdfs/*:/home/ebupt/eb/hadoop-2.2.0/share/hadoop/yarn/lib/*:/home/ebupt/eb/hadoop-2.2.0/share/hadoop/yarn/*:/home/ebupt/eb/hadoop-2.2.0/share/hadoop/mapreduce/lib/*:/home/ebupt/eb/hadoop-2.2.0/share/hadoop/mapreduce/*:/home/ebupt/hadoop/contrib/capacity-scheduler/*.jar:/home/ebupt/eb/hadoop-2.2.0/share/hadoop/yarn/*:/home/ebupt/eb/hadoop-2.2.0/share/hadoop/yarn/lib/*]
14/07/04 15:37:47 INFO yarn.StormOnYarn: Using JAVA_HOME = [/home/ebupt/eb/jdk1.7.0_60]
14/07/04 15:37:47 INFO yarn.StormOnYarn: Setting up app master command:[/home/ebupt/eb/jdk1.7.0_60/bin/java, -Dstorm.home=./storm/storm-0.9.0-wip21/, -Dlogfile.name=<LOG_DIR>/master.log, com.yahoo.storm.yarn.MasterServer, 1><LOG_DIR>/stdout, 2><LOG_DIR>/stderr]
14/07/04 15:37:47 INFO impl.YarnClientImpl: Submitted application application_1402648970753_0025 to ResourceManager at eb170/10.1.69.170:8032
application_1402648970753_0025

注:因为storm是作为一个yarn程序运行在集群上的,所以会有一个AppId,如上图所示:application_1402648970753_0025。

6.storm提交任务

a.获取集群配置

storm-yarn getStormConfig -appId application_1402648970753_0025 -output ~/.storm/storm.yaml
b. 通过以下命令得到Nimbus host
cat ~/.storm/storm.yaml | grep nimbus.host

c. 提交Topology
storm jar ~/storm/storm-yarn-master/lib/storm-starter-0.0.1-SNAPSHOT.jar storm.starter.WordCountTopology WordCountTopology -c nimbus.host=<your nimbus host>
d. 监控Topology
查看Storm ui,地址是:http://<your nimbus host>:7070


e. 关闭Topology
storm kill [Topology_name]
f. 关闭Storm on yarn集群
storm-yarn shutdown -appId [applicationId]

g.查看storm进程状态:nimbus、supervisor、core、logviewer、worker

[ebupt@eb171 ~]$ jps
8700 JournalNode
8939 NodeManager
8805 DFSZKFailoverController
31802 worker
8501 NameNode
5189 Jps
31616 supervisor
8592 DataNode
28865 logviewer
31793 worker
31475 MasterServer
31795 worker
5841 HRegionServer
31509 nimbus
31510 core
31577 QuorumPeerMain

7.他山之石

a.有时候发现supervisor启动不来,会发现是内存资源不够。在虚拟机环境的同志要注意这点。(现实中的环境也是如此)

b.nimbus.host是你提交storm到yarn后,yarn会给你分配一个地址,得自己找。

8.参考资料

https://github.com/yahoo/storm-yarn

http://dongxicheng.org/mapreduce-nextgen/storm-on-yarn/

http://blog.csdn.net/jiushuai/article/details/26693311

http://ghost-face.iteye.com/blog/2017374

9.遇到的问题及解决

① 无法加载storm集群

[ebupt@eb170 conf]$ storm-yarn launch storm.yaml
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/ebupt/eb/hadoop-2.2.0/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/ebupt/eb/storm-yarn/storm-0.9.0-wip21/lib/logback-classic-1.0.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
Exception in thread "main" java.lang.UnsupportedClassVersionError: backtype/storm/utils/Utils : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at com.yahoo.storm.yarn.Config.readStormConfig(Config.java:48)
at com.yahoo.storm.yarn.LaunchCommand.process(LaunchCommand.java:59)
at com.yahoo.storm.yarn.Client.execute(Client.java:142)
at com.yahoo.storm.yarn.Client.main(Client.java:148)

原因:java版本问题。(J2SE 7 = 51)实验室环境的java环境是jdk1.6,storm on yarn要求jdk1.7。

解决:升级jdk版本为1.7。

②yarn上提交storm on yarn,任务fail,日志如下。

User:    huangq
Name: Storm-on-Yarn
Application Type: YARN
State: FAILED
FinalStatus: FAILED
Started: 4-Jul-2014 10:14:15
Elapsed: 4 sec
Tracking URL: History
Diagnostics:
Application application_1402648970753_0013 failed 2 times due to AM Container for appattempt_1402648970753_0013_000002 exited with exitCode: 126 due to: Exception from container-launch:
org.apache.hadoop.util.Shell$ExitCodeException:
at org.apache.hadoop.util.Shell.runCommand(Shell.java:464)
at org.apache.hadoop.util.Shell.run(Shell.java:379)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:589)
at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:195)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:283)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:79)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)
.Failing this attempt.. Failing the application.

原因:yarn给storm on yarn分配的运行机器的jdk版本不是1.7,修改jdk版本后无报错。

解决:所有yarn部署的集群的jdk版本都要统一成jdk1.7。

③ 加载storm集群后,storm-yarn launch ~/storm/storm-0.9.0-wip21/conf/storm.yaml ,在storm UI界面无法看到supervisor的进程。

原因:为什么storm启动后,加载了nimbus、core进程,未能加载supervisor进程。

这是由于“Supervisor将独占节点而不会与其他服务共享节点资源”,正好实验室hadoop2.0测试集群只有2台机器,supervisor已经没有可以独占的节点,导致未能启动。

解决:扩展集群节点数量。另一个测试折衷的办法:手动启动supervisor:storm supervisor & ;坏处是需要自己手动管理supervisor进程,自己kill释放资源。

④mvn编译的时候,报了域名无法解析,下载pom失败的问题。在240的maven上可以编译通过,170集群上出现了这个问题。暂时没解决。

原因:原来怀疑是域名有问题,更改了maven仓库的域名仍然没有解决;第二次尝试:将240的本地仓库拷贝到170机器上,170上仍然没解决。

解决:原因是eb170的机器无法连接外网,因此无法下载外网资源。

⑤supervisor无法启动

原因:

1.yarn集群的配置有问题或者内存不够用,导致无法启动

2.未能够解决,可能是内存不够用。有待研究清楚。

解决:todo。

Storm on Yarn 安装配置的更多相关文章

  1. storm on yarn安装时 提交到yarn失败 failed

    最近在部署storm on yarn ,部署参考文章 http://www.tuicool.com/articles/BFr2Yvhttp://blog.csdn.net/jiushuai/artic ...

  2. Hadoop 2.x(YARN)安装配置LZO

    今天尝试在Hadoop 2.x(YARN)上安装和配置LZO,遇到了很多坑,网上的资料都是基于Hadoop 1.x的,基本没有对于Hadoop 2.x上应用LZO,我在这边记录整个安装配置过程 1. ...

  3. Storm 集群安装配置

    本文详细介绍了 Storm 集群的安装配置方法.如果需要在 AWS 上安装 Storm,你应该看一下 storm-deploy 项目.storm-deploy 可以自动完成 E2 上 Storm 集群 ...

  4. Storm学习笔记——安装配置

    1.安装一个zookeeper集群 2.上传storm的安装包,解压 3.修改配置文件conf/storm.yaml #所使用的zookeeper集群主机storm.zookeeper.servers ...

  5. 三、hadoop、yarn安装配置

    本文hadoop的安装版本为hadoop-2.6.5 关闭防火墙 systemctl stop firewalld 一.安装JDK 1.下载java jdk1.8版本,放在/mnt/sata1目录下, ...

  6. storm集群安装配置

    1.上传解压 2.进入到storm的conf目录 接上图 启动三台节点的zookeeper集群 启动和查看 Storm 在 nimbus.host 所属的机器上启动 nimbus 服务和 logvi ...

  7. Storm on Yarn :原理分析+平台搭建

    Storm on YARN: Storm on YARN被视为大规模Web应用与传统企业应用之间的桥梁.它将Storm事件处理平台与YARN(Yet Another Resource Negotiat ...

  8. Twitter Storm安装配置(Ubuntu系统)单机版

    要使用storm首先要安装以下工具:JDK.Python.zookeeper.zeromq.jzmq.storm (注:各个模块都是独立的,如果安装失败或者卡顿可以单独百度某个模块的安装,都是可以的. ...

  9. 从零学习storm(一) 环境的安装配置

    1.首先 安装zookeeper   2.安装Java环境   3.安装Python   下载python包,编译安装     1.解压      2.configure     3.make     ...

随机推荐

  1. get方式请求会出现中文乱码。post方式不会。

    get方式请求会出现中文乱码.post方式不会.   如果是要解决get方式中文乱码问题,就需要做一个拦截器,或者在web.xml做一个get请求的配置 来自为知笔记(Wiz)

  2. php程序员的开始

    最近又懒惰了,博客没有更新,学习一直在停止,反思自己最近在学习什么了,但是脑子里面空白的一片,让我冒汗了.程序是一个不断的积累,最近在学习的路上,发现自己懂的越来越少,人就有点急躁了,什么都想学,导致 ...

  3. Using load balance for thrift servers

    Software load balance .Nginx(http://nginx.org) 1.Install nginx download source code from http://ngin ...

  4. struts启动报错Javassist library is missing

    很久不用struts2,最近在配置的时候,启动服务器报错 Caused by: java.lang.ExceptionInInitializerError at com.opensymphony.xw ...

  5. Android 设计随便说说之简单实践(合理组合)

    上一篇(Android 设计随便说说之简单实践(模块划分))例举了应用商店设计来说明怎么做模块划分.模块划分主要依赖于第一是业务需求,具体是怎么样的业务.应用商店则包括两个业务,就是向用户展示appl ...

  6. Wi-Fi无线网络下行速度超级慢 (5kb/s)之解决方案

    转载:http://www.iplaysoft.com/wifi-slow-solution.html 作者:X-Force 转载原因:该文分类提出了多种解决方案,并详述其原因.简洁清晰,可作为参考方 ...

  7. C#之垃圾回收

    垃圾回收时现代语言的标志之一.垃圾回收解放了手工管理对象释放的工作,提高了程序的健壮性,但是副作用就是程序代码可以对于创建对象变得随意. 1.避免不必要的对象创建 由于垃圾回收的代价较高,所以C#程序 ...

  8. maven中tomcat7-maven-plugin插件的使用

    1.(挺清晰,但是我在项目上尝试没有成功) http://blog.csdn.net/yhhazr/article/details/7866501 2.(算是有一些详细的运行命令吧,例如自动打包命令或 ...

  9. The Better Way to Debug Your JavaScript Program

    Debugging JS program is not as easy as we do in Visual Studio or any other IDE. I usually us "a ...

  10. AngularJS 路由:ui-router

    UI-Router是Angular-UI提供的客户端路由框架,它解决了原生的ng-route的很多不足:视图不能嵌套.这意味着$scope会发生不必要的重新载入.这也是我们在Onboard中引入ui- ...