1 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
經(jīng)過長時(shí)間的搜索,我發(fā)現(xiàn)應(yīng)用程序無法加載類org.apache.spark.deploy.yarn.ApplicationMaster的原因是因?yàn)檫@不是ApplicationMasterEMR 核心實(shí)例使用的版本 - 它使用org.apache.hadoop.yarn.applications.distributedshell.ApplicationMaster,這需要CLASSPATH輸入中的段包含/usr/lib/hadoop-yarn/*。我更改了 REST 請求的輸入 XML 中的兩個(gè)參數(shù),它成功啟動(dòng)。我仍然需要CLASSPATH為 EMR 實(shí)現(xiàn)配置正確的配置以使應(yīng)用程序成功完成,但這個(gè)問題的主要挑戰(zhàn)已經(jīng)解決。
更新:最終我決定向 EMR 添加一個(gè)步驟并使用參數(shù)實(shí)際上是一種更簡單的方法來處理它。我在 Maven 依賴項(xiàng)中添加了 EMR AWS Java SDK:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-emr</artifactId>
<version>1.11.486</version>
</dependency>
并添加了以下代碼:
AddJobFlowStepsResult result = emr.addJobFlowSteps(new AddJobFlowStepsRequest()
.withJobFlowId(clusterId)
.withSteps(new StepConfig()
.withName(name)
.withActionOnFailure(ActionOnFailure.CONTINUE)
.withHadoopJarStep(new HadoopJarStepConfig()
.withJar("command-runner.jar")
.withArgs(stepargs))));
stepargs 取自我的原始 REST 請求,包括要使用的 jar 和文件 - 只需使用 spark-submit:
List<String> stepargs = new ArrayList<String>();
stepargs.add("spark-submit");
stepargs.add("--class");
stepargs.add(mainClass);
stepargs.add("--deploy-mode");
stepargs.add("cluster");
stepargs.add("--master");
stepargs.add("yarn");
stepargs.add("--files");
stepargs.add(files);
stepargs.add("--jars");
stepargs.add(jars);
stepargs.add("--properties-file");
stepargs.add(confFileName);
stepargs.add(jar);
Iterator<String> itr = args.iterator();
while (itr.hasNext()) {
String arg = itr.next();
if (arg.equals("--arg")) {
stepargs.add(itr.next());
}
}
添加回答
舉報(bào)