我按照以下步骤在Linux机器上安装 oozie 4.1.0 http://gauravkohli.com/2014/08/26/apache-oozie-installation-on-hadoop-2-4-1/
hadoop version - 2.6.0
maven - 3.0.4
pig - 0.12.0
群集设置 -
MASTER NODE runnig - Namenode,Resourcemanager,proxyserver。
SLAVE NODE正在运行 -Datanode,Nodemanager。
当我运行单个工作流程时,工作意味着它成功。 但是当我尝试运行多个Workflow作业时,即两个作业都处于接受状态
检查错误日志,我将问题深入研究,
014-12-24 21:00:36,758 [JobControl] INFO org.apache.hadoop.ipc.Client - Retrying connect to server: 172.16.***.***/172.16.***.***:8032. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
2014-12-25 09:30:39,145 [communication thread] INFO org.apache.hadoop.ipc.Client - Retrying connect to server: 172.16.***.***/172.16.***.***:52406. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
2014-12-25 09:30:39,199 [communication thread] INFO org.apache.hadoop.mapred.Task - Communication exception: java.io.IOException: Failed on local exception: java.net.SocketException: Network is unreachable: no further information; Host Details : local host is: "SystemName/127.0.0.1"; destination host is: "172.16.***.***":52406;
at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:764)
at org.apache.hadoop.ipc.Client.call(Client.java:1415)
at org.apache.hadoop.ipc.Client.call(Client.java:1364)
at org.apache.hadoop.ipc.WritableRpcEngine$Invoker.invoke(WritableRpcEngine.java:231)
at $Proxy9.ping(Unknown Source)
at org.apache.hadoop.mapred.Task$TaskReporter.run(Task.java:742)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.net.SocketException: Network is unreachable: no further information
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:701)
at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:529)
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:493)
at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:606)
at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:700)
at org.apache.hadoop.ipc.Client$Connection.access$2800(Client.java:367)
at org.apache.hadoop.ipc.Client.getConnection(Client.java:1463)
at org.apache.hadoop.ipc.Client.call(Client.java:1382)
... 5 more
Heart beat
Heart beat
.
.
在上面运行的作业中,如果我手动杀死任何一个启动器作业(hadoop job -kill <launcher-job-id>)
意味着所有作业都会成功。所以我认为问题是同时运行的多个启动器作业意味着工作将遇到死锁 ..
如果有人知道上述问题的原因和解决方案。请尽快给我帮忙。
答案 0 :(得分:2)
我尝试了以下解决方案,它对我来说非常适合。
1)将Hadoop计划类型从capacity scheduler更改为fair scheduler。因为对于小型集群,每个队列分配一些内存大小(2048MB)来完成单个映射减少作业。如果在单个队列中运行多个映射减少作业,则意味着它遇到死锁。
解决方案:将以下属性添加到 yarn-site.xml
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>file:/%HADOOP_HOME%/etc/hadoop/fair-scheduler.xml</value>
</property>
2)默认 Hadoop总内存大小分配为8GB。
因此,如果我们运行两个mapreduce程序,Hadoop使用的程序内存超过8GB,那么它就会遇到死锁。
解决方案:使用 yarn-site.xml
中的以下属性增加nodemanager的总内存大小<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>20960</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
所以如果用户尝试运行两个以上的mapreduce程序意味着他需要增加nodemanager或者他需要增加Hadoop的总内存大小(注意:增加大小会减少系统使用内存。上面的属性文件能够同时运行10个map reduce程序。)
答案 1 :(得分:1)
问题在于Queue,当我们在 SAME QUEUE(DEFAULT)中运行作业时,上面的群集设置Resourcemanager负责在salve节点中运行mapreduce作业。由于从属节点中缺少资源,队列中运行的作业将遇到死锁情况。
为了克服这个问题,我们需要通过在不同队列中触发mapreduce作业来拆分Mapreduce作业。
你可以通过在你的oozie workflow.xml
中的pig动作中设置这个部分来做到这一点<configuration>
<property>
<name>mapreduce.job.queuename</name>
<value>launcher2</value>
</property>
注意:此解决方案仅适用于SMALL CLUSTER SETUP