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 log4j
API.
Sumber: [ Dokumen Konfigurasi Log4J , bagian Konfigurasi]
# 2 Lewati log4j.properties
selamaspark-submit
Yang ini sangat rumit, tetapi bukan tidak mungkin. Dan favorit saya.
Log4J selama startup aplikasi selalu mencari dan memuat log4j.properties
file dari classpath.
Namun, saat menggunakan spark-submit
classpath 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.properties
menggunakan spark-submit, dengan menambahkannya ke --files
daftar 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-options
jika menggunakan client
mode. 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-cluster
dengan --files
akan tersedia di direktori root, jadi tidak perlu menambahkan jalur apa pun di file:log4j.properties
.
- File yang terdaftar di
--files
harus 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.properties
file dan itu akan diunggah secara otomatis bersama dengan konfigurasi lainnya.
Sumber: Spark docs, Debugging
Untuk menemukan Anda, SPARK_CONF_DIR
Anda 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 conf
folder, 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
conf
folder kluster (info lebih lanjut, metode # 3)
- Edit
log4j.properties
dalam folder itu (contoh dalam metode # 2)
Setel SPARK_CONF_DIR
ke 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!