在oozie提交的工作正在被杀害

时间:2014-03-13 03:38:00

标签: oozie

我在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)

可能是什么问题?

1 个答案:

答案 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>

我认为解决方案应该是增加任务超时。