【问题标题】:EMR setting config json results in conf file not being createdEMR 设置配置 json 导致未创建 conf 文件
【发布时间】:2017-02-12 08:11:47
【问题描述】:

通常,在我在 EMR 上创建 Spark 集群后,/etc/spark/conf 中会存在一个 spark-defaults.conf 文件。

如果我不提供自定义配置,您会发现spark-defaults.conf 愉快地坐在 conf 目录中:

[hadoop@ip-x-x-x-x ~]$ ls -la /etc/spark/conf/
total 64
drwxr-xr-x 2 root root 4096 Oct  4 08:08 .
drwxr-xr-x 3 root root 4096 Oct  4 07:41 ..
-rw-r--r-- 1 root root  987 Jul 26 21:56 docker.properties.template
-rw-r--r-- 1 root root 1105 Jul 26 21:56 fairscheduler.xml.template
-rw-r--r-- 1 root root 2373 Oct  4 07:42 hive-site.xml
-rw-r--r-- 1 root root 2024 Oct  4 07:42 log4j.properties
-rw-r--r-- 1 root root 2025 Jul 26 21:56 log4j.properties.template
-rw-r--r-- 1 root root 7239 Oct  4 07:42 metrics.properties
-rw-r--r-- 1 root root 7239 Jul 26 21:56 metrics.properties.template
-rw-r--r-- 1 root root  865 Jul 26 21:56 slaves.template
-rw-r--r-- 1 root root 2680 Oct  4 08:08 spark-defaults.conf
-rw-r--r-- 1 root root 1292 Jul 26 21:56 spark-defaults.conf.template
-rwxr-xr-x 1 root root 1563 Oct  4 07:42 spark-env.sh
-rwxr-xr-x 1 root root 3861 Jul 26 21:56 spark-env.sh.template

按照http://docs.aws.amazon.com//ElasticMapReduce/latest/ReleaseGuide/emr-configure-apps.html 的说明,我正在尝试将一个 jar 添加到驱动程序和执行程序的 extraClassPath 属性中。

[
  {
    "Classification": "spark-defaults",
    "Properties": {
      "spark.driver.extraClassPath": ":/usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/home/hadoop/mysql-connector-java-5.1.39-bin.jar",
      "spark.executor.extraClassPath": ":/usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/home/hadoop/mysql-connector-java-5.1.39-bin.jar"
    },
    "Configurations":[

    ]
  }
]

我在创建集群时没有看到任何错误,但是当我添加此配置时,spark-defaults.conf 文件永远不会出现。

这是一个ls,表明文件系统中不存在该文件:

[hadoop@ip-x-x-x-x ~]$ ls -la /etc/spark/conf/
total 64
drwxr-xr-x 2 root root 4096 Oct  4 08:08 .
drwxr-xr-x 3 root root 4096 Oct  4 07:41 ..
-rw-r--r-- 1 root root  987 Jul 26 21:56 docker.properties.template
-rw-r--r-- 1 root root 1105 Jul 26 21:56 fairscheduler.xml.template
-rw-r--r-- 1 root root 2373 Oct  4 07:42 hive-site.xml
-rw-r--r-- 1 root root 2024 Oct  4 07:42 log4j.properties
-rw-r--r-- 1 root root 2025 Jul 26 21:56 log4j.properties.template
-rw-r--r-- 1 root root 7239 Oct  4 07:42 metrics.properties
-rw-r--r-- 1 root root 7239 Jul 26 21:56 metrics.properties.template
-rw-r--r-- 1 root root  865 Jul 26 21:56 slaves.template
-rw-r--r-- 1 root root 1292 Jul 26 21:56 spark-defaults.conf.template
-rwxr-xr-x 1 root root 1563 Oct  4 07:42 spark-env.sh
-rwxr-xr-x 1 root root 3861 Jul 26 21:56 spark-env.sh.template

我做错了什么?

【问题讨论】:

    标签: apache-spark pyspark emr amazon-emr


    【解决方案1】:

    所以我刚刚在 EMR 上对此进行了测试,问题是您的类路径规范前面有一个 :

    "spark.driver.extraClassPath": ":/usr/lib/hadoop-lzo/...
    

    需要

    "spark.driver.extraClassPath": "/usr/lib/hadoop-lzo/....
    

    请注意,AWS 还通过设置 extraClassPath 将内容放在类路径中,并且您在 extraClassPath 中指定的内容将覆盖,而不是附加到该路径上。换句话说,您应该确保您的 spark.xxx.extraClassPath 包含 AWS 默认放置的内容。

    【讨论】:

    • 我正在经历所有这些麻烦来配置他们现有的字符串 + 我的,因为当我在提交时使用 --spark.driver.extraClassPath 时设置 extraClassPath 会被覆盖。它是如此的无赖,以至于它不只是简单地附加在首位。谢谢你检查一下。还有.. 前导冒号是我第一次查看配置时 EMR 设置字符串开头的方式
    • 你并没有真正做错什么。但是,Glennie 认为最初的“:”是问题的原因是正确的。这其实是客户提供的配置分类的解析和处理中一个很诡异的bug,导致文件创建失败。我认为这个问题可能会在最新的 emr-4.x 版本 (emr-4.8.0) 中得到解决,但尚未在 EMR-5.x 行中得到解决。如果 emr-4.8.0 中未修复,将在下一个 emr-4.x 和 emr-5.x 版本中修复。
    • @JonathanKelly 很有见地,您是如何获得这些信息的?
    • 哦。哈哈,实际上我们可能见过。
    猜你喜欢
    • 2019-07-05
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多