【问题标题】:What dependencies should be included when deploying a Spark application to EMR 6.x?将 Spark 应用程序部署到 EMR 6.x 时应包括哪些依赖项?
【发布时间】:2021-09-22 12:56:06
【问题描述】:

我有一个可以在本地运行的 Spark 应用程序。我拥有的依赖项是:

dependencies {
    implementation "org.scala-lang:scala-library:${scalaVersion}"

    implementation "org.apache.spark:spark-sql_2.12:${sparkVersion}"
    implementation "org.apache.spark:spark-launcher_2.12:${sparkVersion}"
    implementation "org.apache.spark:spark-catalyst_2.12:${sparkVersion}"
    implementation "org.apache.spark:spark-streaming_2.12:${sparkVersion}"
    implementation "org.apache.spark:spark-core_2.12:${sparkVersion}"
    implementation group: 'org.apache.spark', name: 'spark-mllib_2.12', version: "${sparkVersion}"
    implementation group: 'org.apache.spark', name: 'spark-hive_2.12', version: "${sparkVersion}"
    implementation group: 'org.apache.spark', name: 'spark-yarn_2.12', version: "${sparkVersion}"
    testImplementation group: 'org.apache.spark', name: 'spark-catalyst_2.12', version: "${sparkVersion}"


    implementation group: 'org.apache.hadoop', name: 'hadoop-aws', version: hadoop_version
    implementation group: 'org.mongodb.spark', name: 'mongo-spark-connector_2.12', version: '3.0.1'
    testImplementation "com.holdenkarau:spark-testing-base_2.12:${sparkVersion}_1.1.0"
}

查看 Spark 文档时,它列出了一个版本矩阵 https://docs.amazonaws.cn/en_us/emr/latest/ReleaseGuide/emr-release-6x.html,解释提供了哪些依赖项。

该文档还指出了应该使用的单独的 Maven 兼容存储库:https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-artifact-repository.html,我不确定是否应该像这样添加它(与 Maven Central 一起):

repositories {
      maven {
          url "https://s3.us-east-1.amazonaws.com/us-east-1-emr-artifacts/emr-6.2.0/repos/maven/"
      }
      mavenCentral()
}

据我了解,EMR 已经提供了某些依赖项,并且这些依赖项具有自定义 Spark 增强功能。

我的集群是使用以下命令创建的:

aws emr create-cluster --auto-scaling-role myprod-emr-auto-scaling --applications Name=Hadoop Name=Hive Name=Pig Name=Hue Name=Spark --bootstrap-actions '[{"Path":"s3://my-emr-bootstrap/sshkeys.sh","Name":"Add ssh keys"}]' --ebs-root-volume-size 20 --ec2-attributes '{"KeyName":"mridang_test","InstanceProfile":"myprod-emr","ServiceAccessSecurityGroup":"sg-xxxxxxxx","SubnetId":"subnet-xxxxxxxx","EmrManagedSlaveSecurityGroup":"sg-xxxxxxxx","EmrManagedMasterSecurityGroup":"sg-xxxxxxxx"}' --service-role myprod-emr-service --enable-debugging --release-label emr-6.2.0 --log-uri 's3n://aws-logs-0123456789-us-east-1/elasticmapreduce/' --name 'MridangTest' --instance-groups '[{"InstanceCount":1,"EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"SizeInGB":32,"VolumeType":"gp2"},"VolumesPerInstance":2}]},"InstanceGroupType":"CORE","InstanceType":"c5a.xlarge","Name":"Core - 2"},{"InstanceCount":1,"EbsConfiguration":{"EbsBlockDeviceConfigs":[{"VolumeSpecification":{"SizeInGB":32,"VolumeType":"gp2"},"VolumesPerInstance":2}]},"InstanceGroupType":"MASTER","InstanceType":"c5a.xlarge","Name":"Master - 1"}]' --scale-down-behavior TERMINATE_AT_TASK_COMPLETION --region us-east-1

应该如何配置我的构建,以便我可以正确地将必要的库包含到我的 ZIP 项目中?围绕这个主题有相当多的附带材料,但没有任何连贯的内容可以解释如何配置它。

不幸的是,我的设置与 Gradle 相关联。

【问题讨论】:

    标签: amazon-web-services apache-spark gradle amazon-emr


    【解决方案1】:

    您可以在 AWS 文档中找到那些增强的 Jars 列表。

    您不需要创建 fat-jar,因为这些 jar 也添加到类路径中。

    您可以通过 SSH 连接到主实例来检查类路径。 类路径的位置 -

    • 蜂巢罐 - /usr/lib/hive
    • hadoop 罐子 - /usr/lib/hadoop
    • 火花罐 - /usr/lib/spark

    如上所述,您需要在 gradle 脚本中将 S3 位置添加为 maven 存储库。这是一个公共 Maven 存储库,因此不需要凭据。

    【讨论】:

      猜你喜欢
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 2012-04-15
      • 2020-05-31
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多