如果我尝试使用Java SDK来在EMR上运行Spark作业,哪种方法更正确?我已经看过两种方法,但目前都无法使用,因此我不确定在创建HadoopJarStepConfig
时采用哪种方法。
使用command-runner.jar (如以下两个示例所示:
https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-submit-step.html
和
HadoopJarStepConfig runExampleConfig = new HadoopJarStepConfig()
.withJar("command-runner.jar")
.withArgs(
"spark-submit",
"--master", "yarn",
"--deploy-mode", "cluster",
"--driver-class-path", JAR_LOCATION, // unsure if this helps
"--class", MAIN_CLASS,
JAR_LOCATION,
"-useSparkLocal", "false"
);
没有command-runner.jar (如此处完成:https://sysadmins.co.za/aws-create-emr-cluster-with-java-sdk-examples/)
HadoopJarStepConfig runExampleConfig = new HadoopJarStepConfig()
.withJar(JAR_LOCATION)
.withMainClass(MAIN_CLASS);
在两种情况下,我都创建一个带有发布标签RunJobFlowRequest
的{{1}},一个Spark emr-5.15.0
以及其他与问题无关的设置。此外,JAR存储在S3存储桶中。
对于上下文,第一种方法导致我的JAR由于某种原因而被跳过(此处为Trying to run Spark on EMR using the AWS SDK for Java, but it skips the remote JAR stored on S3的详细信息);第二种方法导致org.apache.spark.SomeClass的ClassNotFoundException。我认为这可能与我的JAR是超级/超级JAR有关,并且我没有在阴影任何东西...