oozie-wofklow在java操作中因烫伤而间歇性失败

nwsw7zdq  于 2021-06-02  发布在  Hadoop
关注(0)|答案(0)|浏览(221)

我使用的是cdh(clouderahadoop)版本5.12.0(它使用hadoop2.6.0oozie4.1.0)和烫伤2.11
我正在使用一个内置了依赖项的着色jar。
我可以使用hadoop jar命令正确运行所有作业,而不会出现任何错误,如下所示:

  1. hadoop jar /<path>/<to>/<my>/<project>.jar com.twitter.scalding.Tool
  2. -libjars <comma>,<separated>,<list>,<of>,<dependencies>
  3. -D mapreduce.framework.name=yarn
  4. -D yarn.app.mapreduce.am.staging-dir=/<path>/<to>/<staging>/<dir>
  5. -D mapreduce.map.output.compress=True
  6. <my>.<scalding>.<job> --hdfs --input <my>/<input> --output <output>/<dir>

我还可以运行一个带有pig操作或其他操作的oozie工作流,不会有任何问题。但是,当我尝试使用java操作运行oozie工作流时,这些java操作称为烫伤,如下所示:

  1. <action name="myAction">
  2. <java>
  3. <job-tracker>${jobTracker}</job-tracker>
  4. <name-node>${nameNode}</name-node>
  5. <prepare>
  6. <delete path="<output>/<dir>"/>
  7. </prepare>
  8. <configuration>
  9. <property>
  10. <name>oozie.action.sharelib.for.java</name>
  11. <value>scalding</value>
  12. </property>
  13. <property>
  14. <name>oozie.launcher.mapreduce.task.classpath.user.precedence</name>
  15. <value>true</value>
  16. </property>
  17. <property>
  18. <name>oozie.launcher.mapreduce.task.classpath.first</name>
  19. <value>true</value>
  20. </property>
  21. <property>
  22. <name>oozie.launcher.mapreduce.job.user.classpath.first</name>
  23. <value>true</value>
  24. </property>
  25. <property>
  26. <name>mapreduce.job.user.classpath.first</name>
  27. <value>true</value>
  28. </property>
  29. <property>
  30. <name>mapreduce.task.classpath.user.precedence</name>
  31. <value>true</value>
  32. </property>
  33. <property>
  34. <name>mapreduce.task.classpath.first</name>
  35. <value>true</value>
  36. </property>
  37. <property>
  38. <name>mapreduce.map.log.level</name>
  39. <value>DEBUG</value>
  40. </property>
  41. <property>
  42. <name>mapreduce.reduce.log.level</name>
  43. <value>DEBUG</value>
  44. </property>
  45. <property>
  46. <name>mapreduce.job.log4j-properties-file</name>
  47. <value>${appLocation}/conf</value>
  48. </property>
  49. <property>
  50. <name>mapreduce.task.files.preserve.failedtasks</name>
  51. <value>true</value>
  52. </property>
  53. <property>
  54. <name>mapreduce.job.jvm.numtasks</name>
  55. <value>-1</value>
  56. </property>
  57. <property>
  58. <name>oozie.mapreduce.uber.jar</name>
  59. <value>/<path>/<to>/<my>/<class>.jar</value>
  60. </property>
  61. </configuration>
  62. <main-class>com.twitter.scalding.Tool</main-class>
  63. <java-opts>-Xms2G -Xmx3G</java-opts>
  64. <arg><my>.<scalding>.<job></arg>
  65. <arg>--hdfs</arg>
  66. <arg>--input</arg>
  67. <arg><my>/<input></arg>
  68. <arg>--output</arg>
  69. <arg><output>/<dir></arg>
  70. <file>/<path>/<to>/<my>/<project>.jar</file>
  71. </java>
  72. <ok to="end" />
  73. <error to="sendEmailFailure" />

我还设置了:

  1. oozie.libpath=<path>/<to>/<lib>/<directory>
  2. oozie.use.system.libpath=true

在我的属性文件中,所有必需的jar都在libpath中,但是在java操作找不到所需的依赖项的情况下,会出现错误:

  1. Error: java.io.IOException: Split class cascading.tap.hadoop.io.MultiInputSplit not found at
  2. org.apache.hadoop.mapred.MapTask.getSplitDetails(MapTask.java:363) at
  3. org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:432) at
  4. org.apache.hadoop.mapred.MapTask.run(MapTask.java:343) at
  5. org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) at
  6. java.security.AccessController.doPrivileged(Native Method) at
  7. javax.security.auth.Subject.doAs(Subject.java:422) at

org.apache.hadoop.security.usergroupinformation.doas(用户组信息。java:1917)在org.apache.hadoop.mapred.yarnchild.main(yarnchild。java:158)原因:java.lang.classnotfoundexception:在处找不到class cascading.tap.hadoop.io.multiinputsplit
org.apache.hadoop.conf.configuration.getclassbyname(配置。java:2108)在org.apache.hadoop.mapred.maptask.getsplitdetails(maptask。java:361) ... 7个以上
这种情况的发生是不一致的,因为如果我只在工作流中执行一个操作,那么工作流有时会完成,有时会失败。如果我在工作流中放置了多个操作,它最终肯定会在某些操作上失败,不总是相同的操作,但总是有相同的错误。
我相信问题来自于操作获取其依赖项的方式,有时它以正确的顺序加载它们,然后首先获取我想要的依赖项,有时它没有,并且缺少所需的依赖项。但我是奥齐的新手,谁知道呢?
我想我可以增加oozie每个动作的最大尝试次数,但我觉得这并不是一个真正的解决方案,有点类似于对集群掷骰子。
不久前,我看到有人发布了这个问题,并返回到cdh的旧版本(4.1),但这不是我的选择。
建议?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题