2014-03-13 61 views
0

我正在配置工作流程oozie以使用java操作執行mapreduce任務。 使用的workflow.xml是如下:在oozie中提交的作業正在死亡

<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狀態。

我看到下面的錯誤在系統日誌:

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

我也有同樣的問題。我的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> 

我想,解決方案應該是在增加的任務超時。