如何使用 EMR 中的引导操作在 spark-conf 中添加 spark.executor.extraClassPath

Posted

技术标签:

【中文标题】如何使用 EMR 中的引导操作在 spark-conf 中添加 spark.executor.extraClassPath【英文标题】:How to add spark.executor.extraClassPath in spark-conf using bootsrap action in EMR 【发布时间】:2017-07-04 11:50:00 【问题描述】:

我正在尝试将数据从 Netezza 加载到 AWS。我想在引导操作中的 spark-defaults.conf 中添加 spark.executor.extraClassPath 和 spark.driver.extraClassPath 。请在下面找到 updconf.sh(引导操作)

#!/bin/bash
sudo aws s3 cp s3://my-bucket/nzjdbc.jar /usr/lib/sqoop/lib/ --sse aws:kms --sse-kms-key-id 'xxxxxxxxxxxxxxxxxxxxxx'
echo "updating spark-defaults.conf"
sudo chmod 777 /home/hadoop/spark/conf/spark-defaults.conf
sudo echo >> /home/hadoop/spark/conf/spark-defaults.conf
driverstr='/usr/lib/sqoop/lib/nzjdbc.jar' 
sudo echo "export spark.executor.extraClassPath=`echo $driverstr`">>/home/hadoop/spark/conf/spark-defaults.conf
sudo echo "export spark.driver.extraClassPath=`echo $driverstr`">>/home/hadoop/spark/conf/spark-defaults.conf

但我收到“/etc/spark/conf/spark-defaults.conf:没有这样的文件或目录”错误。 我怎样才能做到这一点?

【问题讨论】:

引导操作在安装 EMR 软件之前运行。这就是 spark-defaults.conf 不存在的原因。 【参考方案1】:

有几种方法可以实现这一点。最简单的一个如下:

    创建一个名为 myConfig.json 的文件

    'Configurations': [
                
                    'Classification': 'spark-defaults',
                    "Properties":
                    
                        "spark.executor.extraClassPath": "value for executorsclasspath",
                        "spark.driver.extraClassPath": "value for driver classpath",
                        "spark.yarn.maxAppAttempts": "...",
    ....
    ....//other properties as you need.
                    
                ,
            ]
    

    将文件上传到 S3 存储桶。

    从控制台创建集群时,只需在“编辑软件设置”中提供文件在 S3 中的位置即可。

    根据需要提供其他参数并创建集群。

此外,您还可以使用任何 AWS 开发工具包(如 CLI 或 Python)并提供这些配置参数。

参考:http://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-configure.html

【讨论】:

以上是关于如何使用 EMR 中的引导操作在 spark-conf 中添加 spark.executor.extraClassPath的主要内容,如果未能解决你的问题,请参考以下文章

Amazon EMR - 从设备上的 Yum 更新引导操作失败

如何在 EMR 中的特定实例组上运行脚本

如何在 EMR 集群引导上设置 livy.server.session.timeout?

在 EMR 集群上引导 Spark 3.0.0

如何在 Amazon EMR 上引导安装 Python 模块?

AWS EMR 上的持续集成