java - 在 OOZIE-4.1.0 中运行多个工作流时出错

标签 java hadoop mapreduce oozie oozie-coordinator

我按照以下步骤在 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

集群设置 -

主节点运行 - 名称节点、资源管理器、代理服务器。

SLAVE NODE running -Datanode,Nodemanager.

当我运行单个工作流作业时意味着它成功了。 但是当我尝试运行多个 Workflow 作业时,即两个作业都处于接受状态 enter image description here

检查错误日志,我深入了解问题,

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>)意味着所有工作都成功了。所以我认为问题是同时运行多个启动器作业意味着作业会遇到死锁..

如果有人知道上述问题的原因和解决方案。请尽快帮我一个忙。

最佳答案

我尝试了以下解决方案,它非常适合我。

1) 从 capacity scheduler 更改 Hadoop 计划类型至 fair scheduler .因为对于小型集群,每个队列分配一些内存大小(2048MB)来完成单个 map reduce 作业。如果多个 map reduce 作业在单个队列中运行,则意味着它遇到了死锁

解决方案:将以下属性添加到 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 程序。)

关于java - 在 OOZIE-4.1.0 中运行多个工作流时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27653937/

相关文章:

java - 根据主体tomcat重定向请求

java - 如何在 Android 中将 SQLite 数据库导出为 Tally.ERP 格式?

hadoop - 如何在 pig 的多个加载文件中求和(查看)

hadoop - 从命令行在 Hadoop 中检测压缩编解码器

amazon-s3 - 我应该如何对 s3 中的数据进行分区以便与 hadoop hive 一起使用?

hadoop - 为什么不推荐使用 TableOutputForma?

java - 解析文件中的信息

java - Java中嵌套最深的循环的计数器在哪里声明?

hadoop - serde2.objectinspector 和 typeinfo 包之间的区别

hadoop - map 减少作业在 sqoop 导入期间卡住