Ö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 log4j
API kullanarak çok daha fazlasını başarabilirsiniz .
Kaynak: [ Log4J Yapılandırma Dokümanları , Yapılandırma bölümü]
# 2 Geçiş log4j.properties
sırasındaspark-submit
Bu çok zor ama imkansız değil. Ve benim favorim.
Uygulama başlatma sırasında Log4J her zaman log4j.properties
sınıf yolundan dosya arar ve yükler .
Ancak, spark-submit
Spark 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.properties
ekleyerek kıvılcım-gönderme özelliğini kullanarak özel bir --files
dosya 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-submit
Kü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-options
kullanı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-cluster
ile --files
kök dir mevcut olacaktır, bu nedenle herhangi bir yolu eklemeye gerek yokturfile:log4j.properties
.
- Listelenen dosyalar
--files
mutlak 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.properties
dosyayı 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 conf
klasö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!