当前位置: 首页 > 知识库问答 >
问题:

试图使用AWS SDK for Java在EMR上运行Spark,但它跳过了存储在S3上的远程JAR

贡建修
2023-03-14

我试图使用SDK for Java在EMR上运行Spark,但我在使用存储在S3上的JAR时遇到了一些问题。以下是相关代码:

public String launchCluster() throws Exception {
    StepFactory stepFactory = new StepFactory();

    // Creates a cluster flow step for debugging
    StepConfig enableDebugging = new StepConfig().withName("Enable debugging")
            .withActionOnFailure("TERMINATE_JOB_FLOW")
            .withHadoopJarStep(stepFactory.newEnableDebuggingStep());

    // Here is the original code before I tried command-runner.jar. 
    // When using this, I get a ClassNotFoundException for 
    // org.apache.spark.SparkConf. This is because for some reason, 
    // the super-jar that I'm generating doesn't include apache spark. 
    // Even so, I believe EMR should already have Spark installed if
    // I configure this correctly...

    //        HadoopJarStepConfig runExampleConfig = new HadoopJarStepConfig()
    //                .withJar(JAR_LOCATION)
    //                .withMainClass(MAIN_CLASS);

    HadoopJarStepConfig runExampleConfig = new HadoopJarStepConfig()
            .withJar("command-runner.jar")
            .withArgs(
                    "spark-submit",
                    "--master", "yarn",
                    "--deploy-mode", "cluster",
                    "--class", SOME_MAIN_CLASS,
                    SOME_S3_PATH_TO_SUPERJAR,
                    "-useSparkLocal", "false"
            );

    StepConfig customExampleStep = new StepConfig().withName("Example Step")
            .withActionOnFailure("TERMINATE_JOB_FLOW")
            .withHadoopJarStep(runExampleConfig);

    // Create Applications so that the request knows to launch
    // the cluster with support for Hadoop and Spark.

    // Unsure if Hadoop is necessary...
    Application hadoopApp = new Application().withName("Hadoop");
    Application sparkApp = new Application().withName("Spark");

    RunJobFlowRequest request = new RunJobFlowRequest().withName("spark-cluster")
            .withReleaseLabel("emr-5.15.0")
            .withSteps(enableDebugging, customExampleStep)
            .withApplications(hadoopApp, sparkApp)
            .withLogUri(LOG_URI)
            .withServiceRole("EMR_DefaultRole")
            .withJobFlowRole("EMR_EC2_DefaultRole")
            .withVisibleToAllUsers(true)
            .withInstances(new JobFlowInstancesConfig()
                    .withInstanceCount(3)
                    .withKeepJobFlowAliveWhenNoSteps(true)
                    .withMasterInstanceType("m3.xlarge")
                    .withSlaveInstanceType("m3.xlarge")
            );
    return result.getJobFlowId();
}

步骤完成后没有出错,但实际上并没有输出任何内容。...当我检查日志时,stderr包含以下
警告:Skip remote jar s3://somebucket/myservice-1.0-super.jar.

18/07/17 22:08:31警告客户端:既没有设置spark.yarn.jars也没有设置spark.yarn.archive,回到spark_home下的上载库。

我不确定基于日志的问题是什么。我相信我正在集群上正确地安装Spark。另外,为了提供一些上下文--当我直接使用存储在S3上的超级JAR而不是命令运行器使用withjar时(没有使用withargs),它会正确地获取JAR,但随后它没有安装Spark--我为SparkConf获得了一个ClassNotFoundException(和JavaSparkContextion,这取决于Spark作业代码首先尝试创建的内容)。

任何指示将非常感谢!

共有1个答案

孔磊
2023-03-14

我认为,如果您使用的是最近的EMR版本(例如EMR-5.17.0),那么--master参数应该是yarn-cluster而不是runexampleConfig语句中的yarn。我也有同样的问题,在这次改变后,它对我来说很好。

 类似资料:
  • 我试图在AWS EMR上运行一个Spark应用程序。我遵循http://blogs.aws.amazon.com/bigdata/post/tx15ay5c50k70rv/installing-apache-spark-on-an-amazon-emr-cluster的说明 我从S3中加载fat-jar(通过执行“SBT Assembly”获得)和应用程序所需的输入文件。我在Spark-1.1.0

  • 连接到Spark:pyspark_driver_python=/usr/local/bin/jupyter pyspark_driver_python_opts=“notebook--no-browser--port=7777”pyspark--packages com.databricks:spark-csv2.10:1.1.0--master spark://127.0.0.1:7077--e

  • 每当我使用Eclipse对代码运行JUnit测试时,它似乎只运行非@Nested的测试,我不知道为什么。 有人知道为什么会这样吗?

  • 我通过阅读和练习来学习。 在皮查姆一世 当我运行代码时,Pycharm错误地 但是PIL安装在Ubuntu 22.04.1LTS上@ /usr/lib/python3/dist-packages。 Pycharm不喜欢什么?

  • 我已经安装了火花图表在我的k8s集群掌舵,我有3个豆荚运行1个主和2个执行,但仍然能够提交火花作业...在“提交应用程序”一节https://github.com/bitnami/charts/tree/master/bitnami/spark中提到我们可以使用。/bin/spark-submit--class org.apache.spark.examples.sparkpi--master s

  • 配置 大部分为Spark on YARN模式提供的配置与其它部署模式提供的配置相同。下面这些是为Spark on YARN模式提供的配置。 Spark属性 Property Name Default Meaning spark.yarn.applicationMaster.waitTries 10 ApplicationMaster等待Spark master的次数以及SparkContext初始