Ответ 1
Измените spark-submit
командную строку, добавив три параметра:
-
--files <location_to_your_app.conf>
-
--conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app'
-
--conf 'spark.driver.extraJavaOptions=-Dconfig.resource=app'
Я хочу изменить 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.Измените spark-submit
командную строку, добавив три параметра:
--files <location_to_your_app.conf>
--conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app'
--conf 'spark.driver.extraJavaOptions=-Dconfig.resource=app'
Вот моя программа искры запуска с добавлением опции 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'
Надеюсь, это поможет.
У меня было много проблем с передачей параметров -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
"
Вы можете прочитать мой пост в блоге об общих конфигурациях искры. Я тоже бегу на пряжу.
--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.
Я запускаю приложение 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 для значений системных свойств.
Используйте метод, подобный приведенному ниже, может быть вам полезен -
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
Первоначально у меня был этот файл конфигурации:
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