gpt4 book ai didi

apache-spark - Oozie 的 Spark 提交使用 CDH 5.9.2 中缺少的 ivy 2.4 方法

转载 作者:行者123 更新时间:2023-12-04 05:20:50 24 4
gpt4 key购买 nike

由于类路径的加载顺序,oozie 工作流启动器有时会失败(KILLED 状态)。在 SparkSubmit 中,存在对 ivy 2.4.0 中方法的调用,但此特定方法不在 ivy 2.0.0-rc2 中。对于大多数每小时的标称时间,工作流过程通常运行良好(成功),但启动很少失败,因为加载的是 ivy 2.0 而不是 ivy 2.4。失败后,(编辑过的)oozie 启动器日志显示此堆栈调用:

2017-10-31 20:37:30,339 WARN org.apache.oozie.action.hadoop.SparkActionExecutor: SERVER[xxxx-oozie-lv-102.xxx.net] USER[xxxxx] GROUP[-] TOKEN[] APP[xxxx-proc-oozie] JOB[0143924-170929213137940-oozie-oozi-W] ACTION[0143924-170929213137940-oozie-oozi-W@xxxx] Launcher exception: org.apache.ivy.core.module.descriptor.DefaultModuleDescriptor.setDefaultConf(Ljava/lang/String;)V
java.lang.NoSuchMethodError: org.apache.ivy.core.module.descriptor.DefaultModuleDescriptor.setDefaultConf(Ljava/lang/String;)V
at org.apache.spark.deploy.SparkSubmitUtils$.resolveMavenCoordinates(SparkSubmit.scala:1054)
at org.apache.spark.deploy.SparkSubmit$.prepareSubmitEnvironment(SparkSubmit.scala:287)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:154)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
at org.apache.oozie.action.hadoop.SparkMain.runSpark(SparkMain.java:264)
at org.apache.oozie.action.hadoop.SparkMain.run(SparkMain.java:214)
at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:60)
at org.apache.oozie.action.hadoop.SparkMain.main(SparkMain.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:233)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1912)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

Cloudera Distributed Hadoop 似乎包含ivy 2.0.0-rc2,但它的SparkSubmit 似乎需要ivy 2.4.0 版本。我试图在我的 jar 中包含 ivy 2.4 而排除 2.0,但这甚至是在我的进程启动之前(所以这可能有点荒谬)。我认为必须有一种方法可以强制 2.4.0 版本在 oozie 加载过程中具有一定的优先级,并尝试将 oozie.launcher.mapreduce.user.classpath.first 设置为 true 或 false - - 在任何情况下,作业属性文件确实/必须包含:

oozie.libpath=${nameNode}/user/spark/share/XXXX-spark/
oozie.use.system.libpath=true

注意:在上面的 libpath 中删除 ivy 似乎没有什么不同。

It's likely that the workflow needs an extra flag or ... like this:

<configuration>
<property>
<name>oozie.launcher.mapreduce.map.java.opts</name>
<value>-verbose</value>
</property>
</configuration>

管理集群的团队 (SRE) 更喜欢将原始 jar 与 CDH 5.9.2 一起使用。

我如何通过更改 workflow.xml、作业属性、我的构建或......以满足 SRE 要求以保持 CDH 完整的方式强制 spark-submit 使用 ivy 2.4(而不是 2.0)?我可以通过使缓存无效来解决这个问题吗?

请注意,提到将 ivy 2.4.0 jar 添加到类路径需要一些详细信息,例如将 ivy jar 放在 hdfs 上的确切位置,在某些路径中访问 jar 或......

最佳答案

Cloudera 的 Spark,位于 https://github.com/cloudera/spark/blob/cdh5-1.6.0_5.9.2/pom.xml ,使用 Ivy 2.4.0,但 CDH 发行版附带 Ivy 2.0.0-rc2。

为了解决这个问题,在hdfs folder =/user/oozie/share/lib/lib_{timestamp}/spark中,将ivy 2.0.0-rc2 jar替换为2.4版本(它的名字很奇怪 org.apache.ivy_ivy-2.4.0.jar ...但我认为这不重要)。替换 jar 后,运行 oozie 管理操作(oozie admin -sharelibupdate spark 以刷新/重新扫描此文件夹),此后启动工作流时,进程启动工作正常。

根据 Samson 的评论,ivy 缓存在一些节点上有所不同,因为稍后添加了新节点,这导致了一个不常见/间歇性的问题。

关于apache-spark - Oozie 的 Spark 提交使用 CDH 5.9.2 中缺少的 ivy 2.4 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47045446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com