예제로 수집 된 모든 방법
소개
실제로 는 여러 가지 방법이 있습니다 . 어떤 사람들은 다른 사람들로부터 더 힘들지만, 당신에게 가장 적합한 것은 당신에게 달려 있습니다. 나는 그들 모두를 보여 주려고 노력할 것이다.
앱에서 프로그래밍 방식으로 # 1
가장 쉬운 것처럼 보이지만 해당 설정을 변경하려면 앱을 다시 컴파일해야합니다. 개인적으로, 나는 그것을 좋아하지 않지만 잘 작동합니다.
예:
import org.apache.log4j.{Level, Logger}
val rootLogger = Logger.getRootLogger()
rootLogger.setLevel(Level.ERROR)
Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
Logger.getLogger("org.spark-project").setLevel(Level.WARN)
log4j
API를 사용하여 훨씬 더 많은 것을 얻을 수 있습니다 .
출처 : [ Log4J 구성 문서 , 구성 섹션]
# 2 패스 log4j.properties
중spark-submit
이것은 매우 까다 롭지 만 불가능하지는 않습니다. 그리고 내가 가장 좋아하는 것.
앱 시작 중 Log4J는 항상 log4j.properties
클래스 경로에서 파일을 찾고로드 합니다.
그러나 spark-submit
Spark Cluster를 사용할 때 클래스 경로가 앱의 클래스 경로보다 우선합니다! 그렇기 때문에이 파일을 fat-jar에 넣으면 클러스터 설정이 무시되지 않습니다!
추가 -Dlog4j.configuration=<location of configuration file>
로
spark.driver.extraJavaOptions
(드라이버 용) 또는
spark.executor.extraJavaOptions
(집행에 대한) .
파일을 사용하는 경우 file:
프로토콜이 명시 적으로 제공되어야하며 파일은 모든 노드에 로컬로 존재해야합니다 .
마지막 조건을 만족 시키려면 파일을 노드에 사용 가능한 위치 (예 :)에 업로드하거나을 hdfs
사용하는 경우 드라이버를 사용하여 로컬로 액세스 할 수 있습니다 deploy-mode client
. 그렇지 않으면:
애플리케이션과 함께 업로드 할 파일 목록 log4j.properties
에 추가하여 spark-submit을 사용하여 사용자 정의 를 --files
업로드하십시오.
출처 : Spark 문서, 디버깅
단계 :
예 log4j.properties
:
# Blacklist all to warn level
log4j.rootCategory=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
# Whitelist our app to info :)
log4j.logger.com.github.atais=INFO
spark-submit
클러스터 모드에서 실행 중 :
spark-submit \
--master yarn \
--deploy-mode cluster \
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--files "/absolute/path/to/your/log4j.properties" \
--class com.github.atais.Main \
"SparkApp.jar"
모드를 사용하는 --driver-java-options
경우 사용해야 client
합니다. 스파크 문서, 런타임 환경
spark-submit
클라이언트 모드에서 실행 중 :
spark-submit \
--master yarn \
--deploy-mode client \
--driver-java-options "-Dlog4j.configuration=file:/absolute/path/to/your/log4j.properties \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--files "/absolute/path/to/your/log4j.properties" \
--class com.github.atais.Main \
"SparkApp.jar"
노트:
- 파일 업로드
spark-cluster
와 --files
정도면 어떤 경로를 추가 할 필요가 없습니다 루트 디렉토리에서 사용할 수 있습니다 file:log4j.properties
.
- 에 나열된 파일
--files
에는 절대 경로가 제공되어야합니다!
file:
구성 URI의 접두사는 필수입니다.
# 3 클러스터 편집 conf/log4j.properties
이것은 전역 로깅 구성 파일을 변경 합니다 .
$SPARK_CONF_DIR/log4j.properties
파일을 업데이트하면 다른 구성과 함께 자동으로 업로드됩니다.
출처 : Spark 문서, 디버깅
SPARK_CONF_DIR
당신 을 찾을 수 있습니다 spark-shell
:
atais@cluster:~$ spark-shell
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.1.1
/_/
scala> System.getenv("SPARK_CONF_DIR")
res0: String = /var/lib/spark/latest/conf
이제 /var/lib/spark/latest/conf/log4j.properties
방법 # 2의 예제와 같이 편집 하면 모든 앱이이 구성을 공유합니다.
# 4 구성 디렉토리 무시
솔루션 # 3이 마음에 들지만 응용 프로그램별로 사용자 정의하려는 경우 실제로 conf
폴더를 복사 하고 내용을 편집하고 루트 구성으로 지정할 수 있습니다 spark-submit
.
기본값 이외의 다른 구성 디렉토리를 지정하려면 “SPARK_HOME/conf”
설정할 수 있습니다 SPARK_CONF_DIR
. 스파크는 구성 파일 (사용 spark-defaults.conf
, spark-env.sh
, log4j.properties
, 등 이 디렉토리에서).
출처 : Spark 문서, 구성
단계 :
- 클러스터
conf
폴더 복사 (자세한 정보, 방법 # 3)
log4j.properties
해당 폴더에서 편집 (방법 # 2의 예)
설정 SPARK_CONF_DIR
실행하기 전에,이 폴더에 spark-submit
,
예를 들면 :
export SPARK_CONF_DIR=/absolute/path/to/custom/conf
spark-submit \
--master yarn \
--deploy-mode cluster \
--class com.github.atais.Main \
"SparkApp.jar"
결론
다른 방법이 있는지 확실하지 않지만 A에서 Z까지의 주제를 다루기를 바랍니다. 그렇지 않은 경우 의견에 저를 ping하십시오.
당신의 방법을 즐기십시오!