我使用 3.0.4 AMI (Hadoop 2.2.0) 在 Elastic Mapreduce 上运行 Oozie 4.0.1。我已经从源代码构建了 Oozie,一切都已安装并且似乎正常工作,直到安排 Hive 作业为止。也就是说,我可以连接到 Web 控制台,使用“oozie”命令等提交和终止作业。但是......我发现任务(到目前为止我已经尝试过“Hive”和“Shell”)进入 PREP状态(根据 Oozie Web 控制台)但从未真正开始。
我已经尝试了协调器 (cron) 作业和基本工作流作业,并且在这两种情况下都得到了相同的行为。它到达 hive 任务节点,或 shell 任务节点,然后挂起。
对于基本的工作流任务,job.properties 如下所示:
nameNode=hdfs://ip-redacted.ec2.internal:9000
jobTracker=ip-redacted.ec2.internal:9026
queueName=default
examplesRoot=examples
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/shell
并且 workflow.xml 看起来像:
<workflow-app xmlns="uri:oozie:workflow:0.4" name="shell-wf">
<start to="shell-node"/>
<action name="shell-node">
<shell xmlns="uri:oozie:shell-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
<exec>echo</exec>
<argument>my_output=Hello Oozie</argument>
<capture-output/>
</shell>
<ok to="check-output"/>
<error to="fail"/>
</action>
<decision name="check-output">
<switch>
<case to="end">
${wf:actionData('shell-node')['my_output'] eq 'Hello Oozie'}
</case>
<default to="fail-output"/>
</switch>
</decision>
<kill name="fail">
<message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<kill name="fail-output">
<message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message>
</kill>
<end name="end"/>
</workflow-app>
我在 oozie.log 文件中没有看到任何看起来特别有罪的消息。
非常感谢任何想法或建议。
最佳答案
当节点中没有足够的空闲槽时,Oozie 调度程序会一直等待空闲槽。检查this有关更多详细信息以及如何增加每个节点的槽数。
根据 OP 中提供的信息,这可能是也可能不是解决方案。
关于java - EMR 上的 Oozie - 任务永远卡在 PREP 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23163876/