Semua metode dikumpulkan dengan contoh
Intro
Sebenarnya, ada banyak cara untuk melakukannya . Beberapa lebih sulit dari yang lain, tetapi terserah Anda mana yang paling cocok untuk Anda. Saya akan mencoba memamerkan semuanya.
# 1 Secara programatik di aplikasi Anda
Tampaknya yang termudah, tetapi Anda harus mengkompilasi ulang aplikasi Anda untuk mengubah pengaturan itu. Secara pribadi, saya tidak suka tetapi berfungsi dengan baik.
Contoh:
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)
Anda dapat mencapai lebih banyak lagi hanya dengan menggunakan log4jAPI.
Sumber: [ Dokumen Konfigurasi Log4J , bagian Konfigurasi]
# 2 Lewati log4j.propertiesselamaspark-submit
Yang ini sangat rumit, tetapi bukan tidak mungkin. Dan favorit saya.
Log4J selama startup aplikasi selalu mencari dan memuat log4j.propertiesfile dari classpath.
Namun, saat menggunakan spark-submitclasspath Spark Cluster lebih diutamakan daripada classpath aplikasi! Inilah sebabnya mengapa menempatkan file ini di guci Anda tidak akan mengesampingkan pengaturan cluster!
Tambahkan -Dlog4j.configuration=<location of configuration file>ke
spark.driver.extraJavaOptions (untuk driver) atau
spark.executor.extraJavaOptions (untuk pelaksana) .
Perhatikan bahwa jika menggunakan file, file:protokol harus disediakan secara eksplisit, dan file tersebut harus ada secara lokal di semua node .
Untuk memenuhi kondisi terakhir, Anda dapat mengunggah file ke lokasi yang tersedia untuk node (seperti hdfs) atau mengaksesnya secara lokal dengan driver jika menggunakan deploy-mode client. Jika tidak:
unggah custom log4j.propertiesmenggunakan spark-submit, dengan menambahkannya ke --filesdaftar file yang akan diunggah dengan aplikasi.
Sumber: Spark docs, Debugging
Langkah:
Contoh 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
Eksekusi spark-submit, untuk mode klaster:
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"
Perhatikan bahwa Anda harus menggunakan --driver-java-optionsjika menggunakan clientmode. Spark docs, Runtime env
Eksekusi spark-submit, untuk mode klien:
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"
Catatan:
- File yang diunggah
spark-clusterdengan --filesakan tersedia di direktori root, jadi tidak perlu menambahkan jalur apa pun di file:log4j.properties.
- File yang terdaftar di
--filesharus disediakan dengan jalur absolut!
file: awalan dalam konfigurasi URI adalah wajib.
# 3 Edit cluster conf/log4j.properties
Ini mengubah file konfigurasi pencatatan global .
perbarui $SPARK_CONF_DIR/log4j.propertiesfile dan itu akan diunggah secara otomatis bersama dengan konfigurasi lainnya.
Sumber: Spark docs, Debugging
Untuk menemukan Anda, SPARK_CONF_DIRAnda dapat menggunakan 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
Sekarang cukup edit /var/lib/spark/latest/conf/log4j.properties(dengan contoh dari metode # 2) dan semua aplikasi Anda akan berbagi konfigurasi ini.
# 4 Ganti direktori konfigurasi
Jika Anda menyukai solusi # 3, tetapi ingin menyesuaikannya per aplikasi, Anda sebenarnya dapat menyalin conffolder, mengedit kontennya dan menentukan sebagai konfigurasi root selama spark-submit.
Untuk menentukan direktori konfigurasi lain selain dari yang standar “SPARK_HOME/conf”, Anda dapat mengatur SPARK_CONF_DIR. Spark akan menggunakan file-file konfigurasi ( spark-defaults.conf, spark-env.sh, log4j.properties, dll ) dari direktori ini.
Sumber: Spark docs, Configuration
Langkah:
- Salin
conffolder kluster (info lebih lanjut, metode # 3)
- Edit
log4j.propertiesdalam folder itu (contoh dalam metode # 2)
Setel SPARK_CONF_DIRke folder ini, sebelum menjalankan spark-submit,
contoh:
export SPARK_CONF_DIR=/absolute/path/to/custom/conf
spark-submit \
--master yarn \
--deploy-mode cluster \
--class com.github.atais.Main \
"SparkApp.jar"
Kesimpulan
Saya tidak yakin apakah ada metode lain, tapi saya harap ini mencakup topik dari A hingga Z. Jika tidak, jangan ragu untuk mengirim saya komentar.
Nikmati jalanmu!