java.lang.IllegalArgumentException:

我正在尝试在 EMR 集群上使用 Oozie 运行一个简单的 Java Spark 作业。该作业仅从输入路径获取文件,对其执行很少的基本操作并将结果放在不同的输出路径中。


当我尝试使用 spark-submit 从命令行运行它时,如下所示,它工作正常:


spark-submit --class com.someClassName --master yarn --deploy-mode cluster /home/hadoop/some-local-path/my-jar-file.jar yarn s3n://input-path s3n://output-path

然后我在 Oozie 工作流程中设置了相同的东西。但是,当从那里运行时,作业总是失败。标准输出日志包含这一行:


Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.SparkMain], main() threw exception, Attempt to add (hdfs://[emr-cluster]:8020/user/oozie/workflows/[WF-Name]/lib/[my-jar-file].jar) multiple times to the distributed cache.

java.lang.IllegalArgumentException: Attempt to add (hdfs://[emr-cluster]:8020/user/oozie/workflows/[WF-Name]/lib/[my-jar-file].jar) multiple times to the distributed cache.

我在 StackOverflow 上找到了一个知识库注释和另一个问题,它处理了类似的错误。但对他们来说,由于内部 JAR 文件(而不是用户传递运行的文件)而导致作业失败。尽管如此,我还是尝试了它的解决步骤来删除 share-lib 中 spark 和 oozie 之间常见的 jar 文件,并最终从“ /user/oozie/share/lib/lib_*/spark ”中删除了一些文件。不幸的是,这也没有解决问题。


关于如何调试此问题的任何想法?


德玛西亚99
浏览 175回答 1
1回答

蝴蝶不菲

所以我们终于弄清楚了这个问题——至少在我们的例子中是这样。使用 Hue 创建工作流时,添加 Spark 操作时,默认情况下会提示输入“文件”和“Jar/py 名称”。我们分别在这些字段中提供了我们想要运行的 JAR 文件的路径和该 JAR 文件的名称,它创建了如下所示的基本操作:&nbsp;它创建的最终 XML 如下所示:<action name="spark-210e">&nbsp; &nbsp; <spark xmlns="uri:oozie:spark-action:0.2">&nbsp; &nbsp; &nbsp; &nbsp; <job-tracker>${jobTracker}</job-tracker>&nbsp; &nbsp; &nbsp; &nbsp; <name-node>${nameNode}</name-node>&nbsp; &nbsp; &nbsp; &nbsp; <master>yarn</master>&nbsp; &nbsp; &nbsp; &nbsp; <mode>cluster</mode>&nbsp; &nbsp; &nbsp; &nbsp; <name>CleanseData</name>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <class>com.data.CleanseData</class>&nbsp; &nbsp; &nbsp; &nbsp; <jar>JCleanseData.jar</jar>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <spark-opts>--driver-memory 2G --executor-memory 2G --num-executors 10 --files hive-site.xml</spark-opts>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <arg>yarn</arg>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <arg>[someArg1]</arg>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <arg>[someArg2]</arg>&nbsp; &nbsp; &nbsp; &nbsp; <file>lib/JCleanseData.jar#JCleanseData.jar</file>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; </spark>&nbsp; &nbsp; <ok to="[nextAction]"/>&nbsp; &nbsp; <error to="Kill"/></action>在我们的案例中,其中的默认file标签导致了问题。因此,我们删除了它并将定义编辑为如下所示并且有效。还要注意对<jar>标签的更改。<action name="spark-210e">&nbsp; &nbsp; <spark xmlns="uri:oozie:spark-action:0.2">&nbsp; &nbsp; &nbsp; &nbsp; <job-tracker>${jobTracker}</job-tracker>&nbsp; &nbsp; &nbsp; &nbsp; <name-node>${nameNode}</name-node>&nbsp; &nbsp; &nbsp; &nbsp; <master>yarn</master>&nbsp; &nbsp; &nbsp; &nbsp; <mode>cluster</mode>&nbsp; &nbsp; &nbsp; &nbsp; <name>CleanseData</name>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <class>com.data.CleanseData</class>&nbsp; &nbsp; &nbsp; &nbsp; <jar>hdfs://path/to/JCleanseData.jar</jar>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <spark-opts>--driver-memory 2G --executor-memory 2G --num-executors 10 --files hive-site.xml</spark-opts>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <arg>yarn</arg>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <arg>[someArg1]</arg>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <arg>[someArg1]</arg>&nbsp; &nbsp; </spark>&nbsp; &nbsp; <ok to="[nextAction]"/>&nbsp; &nbsp; <error to="Kill"/></action>PS:我们对 Hive 操作也有类似的问题。hive-site.xml我们应该通过 Hive 操作传递的文件——它创建了一个<job-xml>标签——也导致了问题。所以我们删除了它,它按预期工作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java