Örneklerle toplanan tüm yöntemler
giriş
Aslında bunu yapmanın birçok yolu var . Bazıları diğerlerinden daha zordur, ancak hangisinin size en uygun olduğuna bağlıdır. Hepsini sergilemeye çalışacağım.
1. Uygulamanızda programlı olarak
En kolay gibi görünüyor, ancak bu ayarları değiştirmek için uygulamanızı yeniden derlemeniz gerekecek. Şahsen, sevmiyorum ama iyi çalışıyor.
Misal:
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)
Sadece log4jAPI kullanarak çok daha fazlasını başarabilirsiniz .
Kaynak: [ Log4J Yapılandırma Dokümanları , Yapılandırma bölümü]
# 2 Geçiş log4j.propertiessırasındaspark-submit
Bu çok zor ama imkansız değil. Ve benim favorim.
Uygulama başlatma sırasında Log4J her zaman log4j.propertiessınıf yolundan dosya arar ve yükler .
Ancak, spark-submitSpark Cluster'ın sınıfyolunu kullanırken uygulamanın sınıfyoluna göre önceliği vardır! Bu yüzden bu dosyayı yağ kavanozunuza koymak, kümenin ayarlarını geçersiz kılmaz!
Ekle -Dlog4j.configuration=<location of configuration file>için
spark.driver.extraJavaOptions (sürücü için) veya
spark.executor.extraJavaOptions (uygulayıcıları için) .
Bir dosya kullanılıyorsa, file:protokolün açıkça sağlanması ve dosyanın tüm düğümlerde yerel olarak bulunması gerektiğini unutmayın .
Son koşulu yerine getirmek için, dosyayı düğümler için kullanılabilir konuma yükleyebilir (beğen hdfs) veya kullanıyorsanız sürücü ile yerel olarak erişebilirsiniz deploy-mode client. Aksi takdirde:
uygulama ile yüklenecek dosyalar listesine log4j.propertiesekleyerek kıvılcım-gönderme özelliğini kullanarak özel bir --filesdosya yükleyin.
Kaynak: Spark belgeleri, Hata ayıklama
Adımlar:
Örnek 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-submitKüme modu için yürütme :
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"
Mod --driver-java-optionskullanıyorsanız kullanmanız gerektiğini unutmayın client. Spark docs, Çalışma Zamanı env
spark-submitİstemci modu için yürütme :
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"
Notlar:
- Dosyalar yüklenen
spark-clusterile --fileskök dir mevcut olacaktır, bu nedenle herhangi bir yolu eklemeye gerek yokturfile:log4j.properties .
- Listelenen dosyalar
--filesmutlak yol ile sağlanmalıdır!
file: yapılandırma URI'sinde önek zorunludur.
# 3 Kümeleri düzenleyin conf/log4j.properties
Bu, genel günlük yapılandırma dosyasını değiştirir .
$SPARK_CONF_DIR/log4j.propertiesdosyayı güncellediğinizde diğer yapılandırmalarla birlikte otomatik olarak yüklenecektir.
Kaynak: Spark belgeleri, Hata ayıklama
Kendinizi bulmak için SPARK_CONF_DIRşunları kullanabilirsiniz 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
Şimdi düzenleyin /var/lib/spark/latest/conf/log4j.properties(yöntem # 2'deki örnekle) ve tüm uygulamalarınız bu yapılandırmayı paylaşacaktır.
# 4 Yapılandırma dizinini geçersiz kıl
3. çözümü beğendiyseniz, ancak uygulama başına özelleştirmek istiyorsanız, aslında confklasörü kopyalayabilir, içeriğini düzenleyebilir ve sırasında kök yapılandırması olarak belirtebilirsiniz spark-submit.
Varsayılandan farklı bir yapılandırma dizini belirtmek için “SPARK_HOME/conf”ayarlayabilirsiniz SPARK_CONF_DIR. Kıvılcım (yapılandırma dosyaları kullanacak spark-defaults.conf, spark-env.sh, log4j.properties, vb bu dizinden).
Kaynak: Spark belgeleri, Yapılandırma
Adımlar:
- Kümeleri kopyala
conf klasörünü (daha fazla bilgi, yöntem # 3)
- Düzenle
log4j.properties bu klasör içinde (yöntem # örnek 2)
Yürütmeden SPARK_CONF_DIRönce bu klasöre ayarlayın spark-submit,
örnek:
export SPARK_CONF_DIR=/absolute/path/to/custom/conf
spark-submit \
--master yarn \
--deploy-mode cluster \
--class com.github.atais.Main \
"SparkApp.jar"
Sonuç
Başka bir yöntem olup olmadığından emin değilim, ama umarım bu A'dan Z'ye konuyu kapsar. Değilse, yorumlarda bana ping yapmaktan çekinmeyin!
Yolunuzun tadını çıkarın!