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

Java 在OOZIE-4.1.0中运行多个工作流时出错,java,hadoop,mapreduce,oozie,oozie-coordinator,Java,Hadoop,Mapreduce,Oozie,Oozie Coordinator,我按照以下步骤在Linux机器上安装了oozie 4.1.0 群集设置- 主节点运行-名称节点、资源管理器、代理服务器 从节点正在运行-数据节点,节点管理器 当我运行单个工作流作业时,意味着它成功。 但当我尝试运行多个工作流作业时,即两个作业都处于接受状态 通过查看错误日志,我深入了解问题,如下所示: 014-12-24 21:00:36,758 [JobControl] INFO org.apache.hadoop.ipc.Client - Retrying connect to se

我按照以下步骤在Linux机器上安装了oozie 4.1.0

群集设置-

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

从节点正在运行-数据节点,节点管理器

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

通过查看错误日志,我深入了解问题,如下所示:

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)
意味着所有作业都会成功。因此,我认为问题在于多个启动器作业同时运行意味着作业将遇到死锁


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

问题在于队列,当我们在相同队列(默认值)中运行作业时,使用上述群集设置,Resourcemanager负责在salve节点中运行mapreduce作业。由于从属节点中缺少资源,队列中运行的作业将遇到死锁情况

为了解决这个问题,我们需要通过在不同队列中触发Mapreduce作业来拆分Mapreduce作业

您可以通过在oozieworkflow.xml中的pig操作中设置此部分来完成此操作

<configuration>
<property>
  <name>mapreduce.job.queuename</name>
  <value>launcher2</value>
</property>

mapreduce.job.queuename
发射器2


注意:此解决方案仅适用于小型群集设置

我尝试了下面的解决方案,它非常适合我

1) 将Hadoop计划类型从更改为。因为对于小型集群,每个队列分配一些内存大小(2048MB)来完成单个映射缩减作业。如果在单个队列中运行多个map reduce作业,则表示该作业遇到死锁

解决方案:将以下属性添加到纱线站点.xml

<configuration>
<property>
  <name>mapreduce.job.queuename</name>
  <value>launcher2</value>
</property>

warn.resourcemanager.scheduler.class
org.apache.hadoop.warn.server.resourcemanager.scheduler.fair.FairScheduler
warn.scheduler.fair.allocation.file
文件:/%HADOOP\u HOME%/etc/HADOOP/fair-scheduler.xml
2) 默认情况下,Hadoop的总内存大小分配为8GB

因此,如果我们运行两个mapreduce程序,Hadoop使用的内存将超过8GB,因此它会遇到死锁

解决方案:使用纱线站点的以下属性增加nodemanager的总内存大小。xml

<configuration>
<property>
  <name>mapreduce.job.queuename</name>
  <value>launcher2</value>
</property>

warn.nodemanager.resource.memory-mb
20960
warn.scheduler.minimum-allocation-mb
1024
warn.scheduler.maximum-allocation-mb
2048

因此,如果用户尝试运行两个以上的mapreduce程序,则意味着他需要增加nodemanager,或者需要增加Hadoop的总内存大小(注意:增加大小将减少系统使用内存。上述属性文件可以同时运行10个mapreduce程序。)

您是否已经解决了网络问题?如果您已经安装了本地群集,它是否应该尝试连接到本地主机?您好,谢谢您的回复。。我安装了hadoop和两节点集群机,就像上面提到的架构一样。我也找到了一些解决问题的方法。。若我运行两个工作流作业,则意味着两个启动器作业无法成功创建它。但如果我手动终止任何一个启动程序作业“hadoop作业-终止”,那么两个mapreduce程序都会成功。但在oozie网站上,它显示被杀死的启动器工作状态被杀死。因此,我的错误的确切问题是无法同时运行两个launcher程序。可能是launcher程序试图在同一台机器上的127.0.0.1实例上运行,而不是在不同的节点上运行。从错误消息中,似乎无法访问启动器的端口。嗨,kalai,它仅在集群中运行。因为在resourceManager中,它显示活动节点的数量是2。而且,如果我运行单个mapreduce程序,意味着我也可以看到在第二个节点管理器上运行。。但我需要知道,如果使用的内存大于总内存,会发生什么情况?(假设我同时运行10个以上的作业)队列中的作业将等待内存,当我们在同一队列中运行所有作业时会发生这种情况。因此,您应该根据内存在不同的队列中运行作业。一旦我们在不同的队列中运行,一旦一个队列中的作业完成其映射作业,内存就会自动释放。我到底需要将该配置放在workflow.xml中的什么位置?我讨厌人们忽略如此重要的细节。这需要人们一个又一个小时的修修补补,试图理解他们应该做什么。。。
<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>