Настройка EMR config json приводит к тому, что файл conf не создается

#apache-spark #pyspark #emr #amazon-emr

#apache-spark #pyspark #emr #amazon-emr

Вопрос:

Обычно spark-defaults.conf /etc/spark/conf после создания кластера spark в EMR находится файл.

Если я не предоставлю никаких пользовательских конфигураций, вы обнаружите 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
  

Что я делаю не так?

Ответ №1:

Итак, я только что протестировал это на EMR, и проблема в том, что у вас есть : перед вашей спецификацией classpath:

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

необходимо

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

Обратите внимание, что AWS также помещает данные в classpath с помощью настройки extraClassPath , и те данные, которые вы укажете, extraClassPath будут перезаписаны, а не добавлены к этому. Другими словами, вы должны убедиться, что ваш spark.xxx.extraClassPath включает в себя материал, который AWS помещает туда по умолчанию.

Комментарии:

1. Я сталкиваюсь со всеми этими проблемами, чтобы настроить их существующую строку мою, потому что параметр extraClassPath перезаписывается при использовании --spark.driver.extraClassPath при отправке. Это такой облом, что он не просто добавляется в первую очередь. спасибо, что проверили это. кроме того .. начальный двоеточие — это то, как EMR задает строку для начала, когда я впервые просматриваю конфигурацию

2. На самом деле вы не делаете ничего плохого. Однако Гленни прав в отношении начального «:», являющегося причиной проблемы. На самом деле это очень странная ошибка при анализе и обработке классификаций конфигурации, предоставляемых клиентом, и это приводит к невозможности создания файла. Я думаю, что эта проблема может быть исправлена в последней версии emr-4.x (emr-4.8.0), но еще не в строке EMR-5.x. Если это не исправлено в emr-4.8.0, это будет исправлено в следующих выпусках emr-4.x и emr-5.x.

3. @JonathanKelly очень проницательный, как вы получили эту информацию?

4. ох. ха-ха, мы, возможно, встречались, на самом деле.