分享

什么是Storm-Yarn及Storm-Yarn相关问题解决办法

hyj 发表于 2014-5-2 20:52:47 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 5 19655
问题导读:
1.什么是Yarn?
1.Strom-Yarn启动不了,该如何解决?
2.关于任务队列,如何才能不被提交到default?







此篇需要对Storm-Yarn有所了解才行。
这里不得不说一下Yarn。
什么是Yarn?
我们都知道hadoop1.X遇到了问题,所以从jobtracker那里分离了一些职责,所以产生了Yarn,所以给我们的印象是Yarn是属于hadoop2的,其实不然,Yarn还提供了Storm接口,也就是说Storm也可以提交作业到Yarn上。Yarn是一个什么那,可以理解为一个资源管理器。目前管理是内存和cpu,对于网络等可能以后会扩张。

最近在玩Storm-Yarn,在提交任务获得ApplicationId后,Strom-Yarn启动不了。咨询了Hadoop的集群之后,发现是Hadoop集群对任务收集的队列进行了设置,没有配置默认的default,导致提交任务运行不起来。

参考信息
1:具体的配置:(去掉default)


<name>mapred.queue.names</name>
<value>default,queue1,queue2,queue3,queue4</value>详见:http://yaoyinjie.blog.51cto.com/3189782/872294

2:关于任务队列,如何才能不被提交到default
用户提交jobs到队列(Queues),队列是用来收集jobs的,允许系统提供指定的函数。如队列使用ACLs来控制哪一些用户可以提交jobs到该队列上。队列主要被Hadoop的调度器使用。
Hadoop一开始配置一个独立强制的队列,叫做“default”,队列的名字可以通过mapred.queue.names进行设置。一个job可以定义要提交到哪条队列上,通过属性 mapreduce.job.queuename来进行设置,如果job没有指定相关的队列名字,则会被 提交到“default”队列。

解决办法:
阅读Storm-yarn源码,在LaunchCommand的66行有以下代码:
String queue = cl.getOptionValue("queue", "default");
getOptionValue方法通过queue作为参数获得command中输入的参数,如果没有就返回默认的default。
所以有两种办法来解决这个问题
1:在输入命令行时,增加–queue=xxx进行配置
2:修改storm-yarn的源码,String queue = cl.getOptionValue("queue", "default");将默认值default改成Hadoop集群中配置中指定的消息队列名称

已有(5)人评论

跳转到指定楼层
benwen 发表于 2015-9-8 10:39:29
楼主你好,请问一下,Storm-on-yarn对使用资源的多少是如何控制的?我搭建了,storm-on-yarn之后发现storm使用的资源一直占用了大概13G去,不管是否运行任务.
回复

使用道具 举报

anxidn 发表于 2016-4-16 22:13:34
楼主,你好
请问下我为storm申请yarn任务,出现了错误:
Application application_1460814681056_0001 failed 2 times due to AM Container for appattempt_1460814681056_0001_000002 exited with exitCode: 1
For more detailed output, check application tracking page:http://master:8088/proxy/application_1460814681056_0001/Then, click on links to logs of each attempt.
Diagnostics: Exception from container-launch.
Container id: container_1460814681056_0001_02_000001
Exit code: 1
Stack trace: ExitCodeException exitCode=1:
at org.apache.hadoop.util.Shell.runCommand(Shell.java:538)
at org.apache.hadoop.util.Shell.run(Shell.java:455)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:715)
at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:212)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
是什么原因呢
回复

使用道具 举报

bioger_hit 发表于 2016-4-16 22:34:20
anxidn 发表于 2016-4-16 22:13
楼主,你好
请问下我为storm申请yarn任务,出现了错误:
Application application_1460814681056_0001 fail ...

上面没有错误信息,楼主看看这个链接下有详细信息
http://master:8088/proxy/application_1460814681056_0001/
回复

使用道具 举报

Fuck_A 发表于 2016-7-13 20:07:55
anxidn 发表于 2016-4-16 22:13
楼主,你好
请问下我为storm申请yarn任务,出现了错误:
Application application_1460814681056_0001 fail ...

AM容器启动出错吧,可能是你的及其资源不够之类的。可以看看异常提供的相关日志
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条