개발 도중 "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 ....
응답 해 주셔서 감사합니다. 이미 다른 형식 (typesafe config)의 설정 파일이 있습니다. 구성 파일을 파일에 KV 쌍으로 저장하는 대신 구성하는 것이 여러 가지 이점이 있습니다. 설정 파일을 드라이버와 공유하는 방법이 없습니까? – Cheeko
@Cheeko : 드라이버에 conf 파일을 공유한다는 것은 무엇을 의미합니까? conf 파일에는 무엇이 있습니까? 집행 유언장을 읽을 수 있다면 운전 기사에게 읽어주는 것도 어떨까요? 드라이버에서 같은 것을 읽고 브로드 캐스트 변수로 실행자에게 넘겨 주면됩니다. – Shankar
설정 파일은 모든 노드가 접근 할 수있는 위치에 있지 않습니다. 따라서 나는 파일을 모든 실행자에게 전달하기 위해 --files와 함께 spark-submit를 사용한다. --files가 "클러스터"모드에서 다른 노드를 실행중인 드라이버에 파일을 전달하지 않는 것처럼 보입니다. – Cheeko