-D 매개 변수 또는 환경 변수를 Spark 작업에 전달하는 방법은 무엇입니까?
dev / prod 환경에서 Spark 작업의 Typesafe 구성 을 변경하고 싶습니다 . 이것을 달성하는 가장 쉬운 방법 -Dconfig.resource=ENVNAME
은 작업 에 전달 하는 것 같습니다. 그런 다음 Typesafe 구성 라이브러리가 나를 위해 작업을 수행합니다.
해당 옵션을 작업에 직접 전달할 수있는 방법이 있습니까? 아니면 런타임에 작업 구성을 변경하는 더 좋은 방법이 있습니까?
편집하다:
- spark-submit 명령에
--conf "spark.executor.extraJavaOptions=-Dconfig.resource=dev"
옵션을 추가해도 아무 일도 일어나지 않습니다 . - 내가 가지고
Error: Unrecognized option '-Dconfig.resource=dev'.
내가 통과 할 때-Dconfig.resource=dev
에 스파크 제출 명령을 사용합니다.
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
실행자 자바 옵션 --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'
도움이되기를 바랍니다.
스파크 실행자와 드라이버에 -D 매개 변수를 전달하는 데 많은 문제가 있었기 때문에 내 블로그 게시물에서 인용문을 추가했습니다. "매개 변수를 전달하는 올바른 방법은 속성을 사용하는 것입니다." spark.driver.extraJavaOptions
"및" spark.executor.extraJavaOptions
": log4J 구성 등록 정보와 구성에 필요한 매개 변수를 모두 전달했습니다. (드라이버에는 log4j 구성 만 전달할 수있었습니다.) 예를 들어, "—를 사용하여 spark-submit에 전달 된 등록 정보 파일에 작성되었습니다. 속성 파일 ") :"
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
“
Spark의 전체 구성에 대한 내 블로그 게시물을 읽을 수 있습니다 . 나는 Yarn에서도 실행 중입니다.
--files <location_to_your_app.conf> --conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app' --conf 'spark.driver.extraJavaOptions=-Dconfig.resource=app'
이런 식으로 작성하면 나중에 --conf
이전 항목을 덮어 쓰게되며 작업이 시작된 후 Environment
탭 에서 sparkUI를보고이를 확인할 수 있습니다 .
따라서 올바른 방법은 다음과 같은 동일한 줄에 옵션을 배치하는 것입니다. 이렇게 --conf 'spark.executor.extraJavaOptions=-Da=b -Dc=d'
하면 모든 설정이 sparkUI 아래에 표시됩니다.
다른 Scala 애플리케이션 내에서 시작된 spark-submit 명령을 통해 Spark 애플리케이션을 시작하고 있습니다. 그래서 나는 같은 배열이 있습니다
Array(".../spark-submit", ..., "--conf", confValues, ...)
어디에 confValues
:
- 대한
yarn-cluster
모드 :
"spark.driver.extraJavaOptions=-Drun.mode=production -Dapp.param=..."
- 대한
local[*]
모드 :
"run.mode=development"
하지만 따옴표와 공백을 이스케이프 할 위치 (안)를 이해하는 것은 약간 까다 롭습니다. Spark 웹 인터페이스에서 시스템 속성 값을 확인할 수 있습니다.
spark-submit --driver-java-options "-Denv=DEV -Dmode=local" --class co.xxx.datapipeline.jobs.EventlogAggregator target/datapipeline-jobs-1.0-SNAPSHOT.jar
위의 명령은 저에게 효과적입니다.
-Denv=DEV
=> DEV 환경 속성 파일 읽기,
-Dmode=local
=> 로컬에 SparkContext 생성-.setMaster ( "local [*]")
아래 명령과 같은 방법을 사용하면 도움이 될 수 있습니다.
spark-submit --master local[2] --conf 'spark.driver.extraJavaOptions=Dlog4j.configuration=file:/tmp/log4j.properties' --conf 'spark.executor.extraJavaOptions=-Dlog4j.configuration=file:/tmp/log4j.properties' --class com.test.spark.application.TestSparkJob target/application-0.0.1-SNAPSHOT-jar-with-dependencies.jar prod
I have tried and it worked for me, I would suggest also go through heading below spark post which is really helpful - https://spark.apache.org/docs/latest/running-on-yarn.html
I originally had this config file:
my-app {
environment: dev
other: xxx
}
This is how I'm loading my config in my spark scala code:
val config = ConfigFactory.parseFile(File<"my-app.conf">)
.withFallback(ConfigFactory.load())
.resolve
.getConfig("my-app")
With this setup, despite what the Typesafe Config documentation and all the other answers say, the system property override didn't work for me when I launched my spark job like so:
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
To get it to work I had to change my config file to:
my-app {
environment: dev
environment: ${?env.override}
other: xxx
}
and then launch it like so:
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
'IT TIP' 카테고리의 다른 글
ASP.NET MVC에서 Error.cshtml은 어떻게 호출됩니까? (0) | 2020.10.24 |
---|---|
어레이가 동일하게 유지 될 확률은 얼마입니까? (0) | 2020.10.24 |
왜 instanceof가 babel-node 아래에있는 Error 서브 클래스의 인스턴스에서 작동하지 않습니까? (0) | 2020.10.24 |
Docker : 마운트가 거부되었습니다. (0) | 2020.10.24 |
Netbeans 프로젝트를 Maven 지원 프로젝트로 변환 (0) | 2020.10.24 |