Подтвердить что ты не робот

Как передать параметр -D или переменную среды в Spark?

Я хочу изменить Configafe config задания Spark в среде dev/prod. Мне кажется, что самый простой способ выполнить это - передать -Dconfig.resource=ENVNAME на задание. Тогда библиотека configs Configafe выполнит эту работу для меня.

Есть ли способ передать эту опцию непосредственно на задание? Или, может быть, есть лучший способ изменить конфигурацию задания во время выполнения?

EDIT:

  • Ничего не происходит, когда я добавляю параметр --conf "spark.executor.extraJavaOptions=-Dconfig.resource=dev" для команды spark-submit.
  • Я получил Error: Unrecognized option '-Dconfig.resource=dev'., когда передаю команду -Dconfig.resource=dev в команду spark-submit.
4b9b3361

Ответ 1

Измените spark-submit командную строку, добавив три параметра:

  • --files <location_to_your_app.conf>
  • --conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app'
  • --conf 'spark.driver.extraJavaOptions=-Dconfig.resource=app'

Ответ 2

Вот моя программа искры запуска с добавлением опции java

/home/spark/spark-1.6.1-bin-hadoop2.6/bin/spark-submit \
--files /home/spark/jobs/fact_stats_ad.conf \
--conf spark.executor.extraJavaOptions=-Dconfig.fuction.conf \
--conf 'spark.driver.extraJavaOptions=-Dalluxio.user.file.writetype.default=CACHE_THROUGH -Dalluxio.user.file.write.location.policy.class=alluxio.client.file.policy.MostAvailableFirstPolicy -Dconfig.file=/home/spark/jobs/fact_stats_ad.conf' \
--class jobs.DiskDailyJob \
--packages com.databricks:spark-csv_2.10:1.4.0 \
--jars /home/spark/jobs/alluxio-core-client-1.2.0-RC2-jar-with-dependencies.jar \
--driver-memory 2g \
/home/spark/jobs/convert_to_parquet.jar \
AD_COOKIE_REPORT FACT_AD_STATS_DAILY | tee /data/fact_ad_stats_daily.log

как вы можете видеть настраиваемый файл конфигурации  --files /home/spark/jobs/fact_stats_ad.conf

параметры java исполнителя  --conf spark.executor.extraJavaOptions=-Dconfig.fuction.conf

параметры драйвера java.  --conf 'spark.driver.extraJavaOptions=-Dalluxio.user.file.writetype.default=CACHE_THROUGH -Dalluxio.user.file.write.location.policy.class=alluxio.client.file.policy.MostAvailableFirstPolicy -Dconfig.file=/home/spark/jobs/fact_stats_ad.conf'

Надеюсь, это поможет.

Ответ 3

У меня было много проблем с передачей параметров -D, чтобы исправить исполнителей и драйвер, я добавил цитату из своего сообщения в блоге об этом: "Правильный способ передать параметр через свойство:" spark.driver.extraJavaOptions "и" spark.executor.extraJavaOptions": Ive передал свойство log4J configurations и параметр, который мне нужен для конфигураций. (Для драйвера я смог передать только конфигурацию log4j). Например (было написано в файле свойств, переданном в spark-submit с "-properties-file" ): "

spark.driver.extraJavaOptions –Dlog4j.configuration=file:///spark/conf/log4j.properties -
spark.executor.extraJavaOptions –Dlog4j.configuration=file:///spark/conf/log4j.properties -Dapplication.properties.file=hdfs:///some/path/on/hdfs/app.properties
spark.application.properties.file hdfs:///some/path/on/hdfs/app.properties

"

Вы можете прочитать мой пост в блоге об общих конфигурациях искры. Я тоже бегу на пряжу.

Ответ 4

--files <location_to_your_app.conf> --conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app' --conf 'spark.driver.extraJavaOptions=-Dconfig.resource=app'

если вы напишете таким образом, более поздняя --conf перезапишет предыдущую, вы можете проверить это, посмотрев на sparkUI после начала работы на вкладке Environment.

поэтому правильный способ заключается в том, чтобы поместить параметры в одну строку следующим образом: --conf 'spark.executor.extraJavaOptions=-Da=b -Dc=d' если вы это сделаете, вы можете найти, что все ваши настройки будут показаны в режиме sparkUI.

Ответ 5

Я запускаю приложение Spark с помощью команды spark-submit, запущенной из другого приложения Scala. Таким образом, у меня есть массив вроде

Array(".../spark-submit", ..., "--conf", confValues, ...)

где confValues:

  • для режима yarn-cluster:
    "spark.driver.extraJavaOptions=-Drun.mode=production -Dapp.param=..."
  • для режима local[*]:
    "run.mode=development"

Немного сложно понять, где (а не) избегать цитат и пробелов. Вы можете проверить веб-интерфейс Spark для значений системных свойств.

Ответ 6

Используйте метод, подобный приведенному ниже, может быть вам полезен -

spark-submit --master local [2] - conf 'Spark.driver.extraJavaOptions = Dlog4j.configuration = файл:/tmp/log4j.properties - conf 'spark.executor.extraJavaOptions = -Dlog4j.configuration = файл:/tmp/log4j.properties'--class com.test.spark.application.TestSparkJob target/application-0.0.1-SNAPSHOT-jar-with-dependencies.jar prod

Я пробовал, и это сработало для меня, я бы посоветовал также пройти через заголовок ниже искрового сообщения, что действительно полезно - https://spark.apache.org/docs/latest/running-on-yarn.html

Ответ 7

Первоначально у меня был этот файл конфигурации:

my-app {
  environment: dev
  other: xxx
}

Вот как я загружаю свою конфигурацию в свой искровой код scala:

val config = ConfigFactory.parseFile(File<"my-app.conf">)
  .withFallback(ConfigFactory.load())
  .resolve
  .getConfig("my-app")

С этой настройкой, несмотря на то, что документация Configafe Config и все другие ответы говорят, переопределение системного свойства не сработало для меня, когда я запускал свою искровую работу следующим образом:

spark-submit \
  --master yarn \
  --deploy-mode cluster \
  --name my-app \
  --driver-java-options='-XX:MaxPermSize=256M -Dmy-app.environment=prod' \
  --files my-app.conf \
  my-app.jar

Чтобы заставить его работать, мне пришлось изменить свой файл конфигурации на:

my-app {
  environment: dev
  environment: ${?env.override}
  other: xxx
}

а затем запустите его так:

spark-submit \
  --master yarn \
  --deploy-mode cluster \
  --name my-app \
  --driver-java-options='-XX:MaxPermSize=256M -Denv.override=prod' \
  --files my-app.conf \
  my-app.jar