2016-10-21 3 views
3

개발 도중 "spark"작업을 "클라이언트"모드로 실행했습니다. 나는 "- file"을 사용하여 설정 파일을 실행 프로그램과 공유합니다. 드라이버가 로컬에서 설정 파일을 읽는 중입니다. 이제 "클러스터"모드로 작업을 배포하려고합니다. 현재 드라이버와 설정 파일을 공유하는 데 문제가 있습니다.클러스터 모드에서 구성 파일을 spark-submit과 공유하십시오.

예, 구성 파일 이름을 extraJavaOptions로 드라이버와 실행 프로그램에 전달합니다.

val configFile = org.apache.spark.SparkFiles.get(System.getProperty("config.file.name")) 

이 파일은 실행 프로그램에서는 잘 작동하지만 드라이버에서는 실패합니다. 나는 파일이 executor와 공유되고 드라이버가 실행되는 컨테이너와 공유되지 않는다고 생각한다. 하나의 옵션은 S3에서 설정 파일을 유지하는 것입니다. 나는 이것이 spark-submit을 사용하여 달성 될 수 있는지 확인하고 싶었다.

> spark-submit --deploy-mode cluster --master yarn --driver-cores 2 
> --driver-memory 4g --num-executors 4 --executor-cores 4 --executor-memory 10g \ 
> --files /home/hadoop/Streaming.conf,/home/hadoop/log4j.properties \ 
> --conf **spark.driver.extraJavaOptions**="-Dlog4j.configuration=log4j.properties 
> -Dconfig.file.name=Streaming.conf" \ 
> --conf **spark.executor.extraJavaOptions**="-Dlog4j.configuration=log4j.properties 
> -Dconfig.file.name=Streaming.conf" \ 
> --class .... 

답변

1

Spark submit 명령에서 --properties-file 옵션을 사용해보십시오. 예를 들어 속성에 대한

콘텐츠

spark.key1=value1 
spark.key2=value2 

모든 키가 sparkprefixed 할 필요가 파일.

그런 다음 spark-submit 명령을 사용하여 속성 파일을 전달하십시오.

bin/spark-submit --properties-file propertiesfile.properties 

그런 다음 코드에서 당신은 sparkcontext getConf 방법 아래 사용하여 키를 얻을 수 있습니다.

sc.getConf.get("spark.key1") // returns value1 

키 값을 얻으면 어디에서나 사용할 수 있습니다.

+1

응답 해 주셔서 감사합니다. 이미 다른 형식 (typesafe config)의 설정 파일이 있습니다. 구성 파일을 파일에 KV 쌍으로 저장하는 대신 구성하는 것이 여러 가지 이점이 있습니다. 설정 파일을 드라이버와 공유하는 방법이 없습니까? – Cheeko

+0

@Cheeko : 드라이버에 conf 파일을 공유한다는 것은 무엇을 의미합니까? conf 파일에는 무엇이 있습니까? 집행 유언장을 읽을 수 있다면 운전 기사에게 읽어주는 것도 어떨까요? 드라이버에서 같은 것을 읽고 브로드 캐스트 변수로 실행자에게 넘겨 주면됩니다. – Shankar

+0

설정 파일은 모든 노드가 접근 할 수있는 위치에 있지 않습니다. 따라서 나는 파일을 모든 실행자에게 전달하기 위해 --files와 함께 spark-submit를 사용한다. --files가 "클러스터"모드에서 다른 노드를 실행중인 드라이버에 파일을 전달하지 않는 것처럼 보입니다. – Cheeko

관련 문제