我在oozie
中配置工作流以使用java操作执行mapreduce任务。
使用的workflow.xml如下:
<workflow-app name="accesslogloader" xmlns="uri:oozie:workflow:0.1">
<start to="javamain"/>
<action name="javamain">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${namenode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
<property>
<name>fs.hdfs.impl.disable.cache</name>
<value>true</value>
</property>
</configuration>
<main-class>org.path.AccessLogHandler</main-class>
</java>
<ok to="end"/>
<error to="killjob"/>
</action>
<kill name="killjob">
<message>"Job killed due to error"</message>
</kill>
<end name="end"/>
</workflow-app>
运行oozie工作后。 MR作业运行并将数据保存到hbase。当数据插入hbase时,我看到MR作业已完成。
但完成后oozie UI显示为KILLED状态。
我在syslog中看到以下错误:
2014-03-13 00:20:23,425 INFO [main] org.apache.hadoop.mapred.MapTask: numReduceTasks: 0
2014-03-13 00:20:24,311 ERROR [main] org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:root (auth:SIMPLE) cause:java.io.IOException: Filesystem closed
2014-03-13 00:20:24,315 WARN [main] org.apache.hadoop.mapred.YarnChild: Exception running child : java.io.IOException: Filesystem closed
at org.apache.hadoop.hdfs.DFSClient.checkOpen(DFSClient.java:565)
at org.apache.hadoop.hdfs.DFSInputStream.close(DFSInputStream.java:589)
at java.io.FilterInputStream.close(FilterInputStream.java:181)
at org.apache.hadoop.util.LineReader.close(LineReader.java:149)
at org.apache.hadoop.mapred.LineRecordReader.close(LineRecordReader.java:241)
at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.close(MapTask.java:207)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:438)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:340)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:157)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:152)
可能是什么问题?
答案 0 :(得分:0)
我确实有同样的问题。我的java动作确实运行了一系列复杂的工作。不可否认,这不是好设计,但它是实现目标的最短途径。 我试图通过这个道具
<property>
<name>fs.hdfs.impl.disable.cache</name>
<value>true</value>
</property>
它没有帮助。 我假设java动作运行时间超过10分钟(mpreduce任务的默认超时时间)。 jobtracker杀了它。我的行动超过10分钟。如果行动不到10分钟,我就不会遇到这样的问题。我试图通过财产
<property>
<name>mapred.task.timeout</name>
<value>7200000</value>
</property>
但它没有通过。 这是一个行动声明
<action name="long-running-java-action">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.queue.name</name>
<value>default</value>
</property>
<property>
<name>mapred.task.timeout</name>
<value>7200000</value>
</property>
<property> <!-- https://issues.apache.org/jira/browse/SQOOP-1226 ???? -->
<name>fs.hdfs.impl.disable.cache</name>
<value>true</value>
</property>
</configuration>
<main-class>my.super.mapreduce.Runner</main-class>
<java-opts>-Xmx4096m</java-opts>
<arg>--config</arg>
<arg>complexConfigGoesHere</arg>
</java>
<ok to="end"/>
<error to="kill"/>
</action>
我认为解决方案应该是增加任务超时。