-D 매개 변수 또는 환경 변수를 Spark 작업에 전달하는 방법은 무엇입니까?


83

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스파크 제출 명령을 사용합니다.

1
일을 시작하는 방법을 지정하십시오. 일반적으로 -Dx=y명령 줄을 고수 할 수 있습니다 .
Daniel Darabos 2015 년

@DanielDarabos YARN에서 spark-submit으로 작업을 시작합니다.
kopiczko

@kopiczko 대답을 수락 할 수 있습니까?
Don Branson

@DonBranson 나는 여기에 모든 답변을 시도했지만 Spark 1.6.0에서 나에게서 일한 사람은 없습니다! 이 정확한 문제가 있습니다. -D 매개 변수를 통해 Typesafe 구성 파일의 구성 속성을 재정의 할 수 없습니다.
nemo

@kopiczko 해결책을 찾았습니까?
nemo

답변:


58

spark-submit세 가지 옵션을 추가하여 명령 줄을 변경합니다 .

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

19
--conf 'spark.executor.extraJavaOptions=-Dconfig.resource=app'스파크가 클라이언트 모드에서 드라이버를 제출할 때 옵션 을 사용하면 작동하지 않습니다. --driver-java-options "-Dconfig.resource=app"대신 사용하십시오 . Spark 구성을 참조하십시오 .
YoYo

2
원사 내가 사용에 : 파일은 집행에 관련한 이름을 제공합니다; 따라서 지정된 파일이 application.conf로 표시됩니다. --files <location_to_your.conf>#application.conf --driver-java-options -Dconfig.file=your.conf#
vpipkt

대안spark-submit --driver-java-options='-Dmy.config.path=myConfigValue'
Jean-Adrien

@kopiczko 이것은 나를 위해 작동하지 않습니다 ...이 문제가 해결 되었습니까?
nemo

그것은 2015 년에 저에게 효과적이었습니다. ATM 나는 그것이 어떤 Spark 버전인지조차 말할 수 없습니다.
kopiczko

21

다음은 추가 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'

도움이되기를 바랍니다.


이 답변은 여러 옵션을 공백으로 구분 된 -Dkey = value 쌍 목록으로 전달하는 형식을 표시하는 데 도움이됩니다.
Paul

9

스파크 실행자와 드라이버에 -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에서도 실행 중입니다.


더 많은 콘텐츠를 추가하고 링크 전용 답변을 피하십시오.
Ajay Gupta 2015

7

--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 아래에 표시됩니다.


"--conf"플래그에 대해서는 이것이 사실이라고 생각하지 않지만 "--files"에 대해서는 사실입니다.
Penumbra

2.1.0 및 2.1.1에서 테스트했습니다. sparkUI-> Environment에 따르면 --conf두 번 사용하는 경우에만 나중에 표시 됩니다.
linehrr

1
나는 당신의 예에 결함이 있다고 생각합니다. "--conf"플래그 뒤에 완전히 다른 두 개의 키 / 값을 표시합니다 (실행 프로그램 하나, 드라이버 하나). 그것들은 서로 덮어 쓸 수 없습니다. --conf 옵션의 마지막 반복 만 적용된다고 말하는 경우에는 맞지만 예제에서는이를 표시하지 않습니다. spark-submit에서 :-하나의 --files 옵션을 사용할 수 있으며, 마지막 파일 (여러 개인 경우)이 사용되고 이전 파일은 무시됩니다.-여러 개의 --conf key = value 옵션을 사용할 수 있지만 키를 복제하는 경우 마지막 값을 사용합니다
Penumbra

3

다른 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 웹 인터페이스에서 시스템 속성 값을 확인할 수 있습니다.


이것은 나를 위해 일했습니다! (적어도 local[*]모드의 경우). 나는 함께 노력하겠습니다 yarn-cluster모드와 주석을 갱신 (I 잊지하지 않는 경우 ... : D)
acidghost

3
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 [*]")


0

아래 명령과 같은 방법을 사용하면 도움이 될 수 있습니다.

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

나는 시도했고 그것은 나를 위해 일했다. 정말 도움이되는 스파크 게시물 아래 제목을 살펴볼 것을 제안합니다-https: //spark.apache.org/docs/latest/running-on-yarn.html


0

원래이 구성 파일이있었습니다.

my-app {
  environment: dev
  other: xxx
}

이것이 내 스파크 스칼라 코드에서 내 구성을로드하는 방법입니다.

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

이 설정을 사용하면 Typesafe 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

나는 spark 1.6.0 BTW를 실행하고 있습니다
nemo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.