Saya ingin menghentikan berbagai pesan yang datang pada cangkang percikan.
Saya mencoba mengedit log4j.properties
file untuk menghentikan pesan ini.
Berikut isinya log4j.properties
# Define the root logger with appender file
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
# Settings to quiet third party logs that are too verbose
log4j.logger.org.eclipse.jetty=WARN
log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
Namun pesan masih ditampilkan di konsol.
Berikut beberapa contoh pesan
15/01/05 15:11:45 INFO SparkEnv: Registering BlockManagerMaster
15/01/05 15:11:45 INFO DiskBlockManager: Created local directory at /tmp/spark-local-20150105151145-b1ba
15/01/05 15:11:45 INFO MemoryStore: MemoryStore started with capacity 0.0 B.
15/01/05 15:11:45 INFO ConnectionManager: Bound socket to port 44728 with id = ConnectionManagerId(192.168.100.85,44728)
15/01/05 15:11:45 INFO BlockManagerMaster: Trying to register BlockManager
15/01/05 15:11:45 INFO BlockManagerMasterActor$BlockManagerInfo: Registering block manager 192.168.100.85:44728 with 0.0 B RAM
15/01/05 15:11:45 INFO BlockManagerMaster: Registered BlockManager
15/01/05 15:11:45 INFO HttpServer: Starting HTTP Server
15/01/05 15:11:45 INFO HttpBroadcast: Broadcast server star
Bagaimana saya menghentikan ini?
apache-spark
log4j
spark-submit
Wisnu
sumber
sumber
Tepat setelah mulai
spark-shell
mengetik;Di Spark 2.0 (Scala):
API Documents: https://spark.apache.org/docs/2.2.0/api/scala/index.html#org.apache.spark.sql.SparkSession
Untuk Jawa:
sumber
Terima kasih @AkhlD dan @Sachin Janani karena menyarankan perubahan pada
.conf
file.Kode berikut memecahkan masalah saya:
1) Ditambahkan
import org.apache.log4j.{Level, Logger}
di bagian impor2) Menambahkan baris berikut setelah pembuatan objek konteks percikan yaitu setelah
val sc = new SparkContext(conf)
:sumber
Gunakan perintah di bawah ini untuk mengubah level log saat mengirimkan aplikasi menggunakan spark-submit atau spark-sql:
Catatan: ganti
<file path>
tempatlog4j
file konfigurasi disimpan.Log4j.properties:
log4j.xml
Beralih ke FileAppender di log4j.xml jika Anda ingin menulis log ke file bukan konsol.
LOG_DIR
adalah variabel untuk direktori log yang dapat Anda berikan menggunakanspark-submit --conf "spark.driver.extraJavaOptions=-D
.Hal penting lain yang perlu dipahami di sini adalah, ketika pekerjaan diluncurkan dalam mode terdistribusi (mode penyebaran cluster dan master sebagai benang atau mesos) file konfigurasi log4j harus ada pada driver dan node pekerja (
log4j.configuration=file:<file path>/log4j.xml
) lain log4j init akan mengeluh-Petunjuk untuk memecahkan masalah ini-
Simpan file konfigurasi log4j dalam sistem file terdistribusi (HDFS atau mesos) dan tambahkan konfigurasi eksternal menggunakan log4j PropertyConfigurator . atau gunakan addCile sparkContext untuk membuatnya tersedia pada setiap node kemudian gunakan log4j PropertyConfigurator untuk memuat ulang konfigurasi.
sumber
org
log yang secara tradisional dari logger default.Log4j.properties
file ini? Sepertinya tidak digunakan. Apakah Anda hanya mendokumentasikan properti yang diatur dalam file XML?--files
dalam perintah spark-submit untuk membuat log4j.properties tersedia di semua node.Log4.properties
bawahmain/resources
dalam kasus itu tidak adaSemua 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:
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!Untuk memenuhi kondisi terakhir, Anda dapat mengunggah file ke lokasi yang tersedia untuk node (seperti
hdfs
) atau mengaksesnya secara lokal dengan driver jika menggunakandeploy-mode client
. Jika tidak:Sumber: Spark docs, Debugging
Langkah:
Contoh
log4j.properties
:Eksekusi
spark-submit
, untuk mode klaster:Perhatikan bahwa Anda harus menggunakan
--driver-java-options
jika menggunakanclient
mode. Spark docs, Runtime envEksekusi
spark-submit
, untuk mode klien:Catatan:
spark-cluster
dengan--files
akan tersedia di direktori root, jadi tidak perlu menambahkan jalur apa pun difile:log4j.properties
.--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 .
Sumber: Spark docs, Debugging
Untuk menemukan Anda,
SPARK_CONF_DIR
Anda dapat menggunakanspark-shell
: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 selamaspark-submit
.Sumber: Spark docs, Configuration
Langkah:
conf
folder kluster (info lebih lanjut, metode # 3)log4j.properties
dalam folder itu (contoh dalam metode # 2)Setel
SPARK_CONF_DIR
ke folder ini, sebelum menjalankanspark-submit
,contoh:
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!
sumber
Anda mengatur untuk menonaktifkan Log dengan mengatur levelnya ke OFF sebagai berikut:
atau edit file log dan setel level log ke mati hanya dengan mengubah properti berikut:
sumber
Saya hanya menambahkan baris ini ke semua skrip pyspark saya di atas tepat di bawah pernyataan impor.
contoh header dari skrip pyspark saya
sumber
Jawaban di atas benar tetapi tidak benar-benar membantu saya karena ada informasi tambahan yang saya butuhkan.
Saya baru saja menyiapkan Spark sehingga file log4j masih memiliki akhiran '.template' dan tidak sedang dibaca. Saya percaya bahwa logging maka default ke conf log logging inti.
Jadi jika Anda seperti saya dan menemukan bahwa jawaban di atas tidak membantu, maka mungkin Anda juga harus menghapus akhiran '.template' dari file conf log4j Anda dan kemudian jawaban di atas berfungsi dengan baik!
http://apache-spark-user-list.1001560.n3.nabble.com/disable-log4j-for-spark-shell-td11278.html
sumber
Dengan Python / Spark kita bisa melakukan:
Sparkcontaxt setelah mendefinisikan 'sc' memanggil fungsi ini dengan: quiet_logs (sc)
sumber
tl; dr
Detail-
Secara internal,
setLogLevel
panggilanorg.apache.log4j.Level.toLevel(logLevel)
yang akan digunakan untuk mengatur menggunakanorg.apache.log4j.LogManager.getRootLogger().setLevel(level)
.Anda dapat mengatur pencatatan log default untuk Spark shell
conf/log4j.properties
. Gunakanconf/log4j.properties.template
sebagai titik awal.Mengatur Level Log di Aplikasi Spark
Dalam aplikasi Spark mandiri atau saat dalam sesi Spark Shell, gunakan yang berikut:
Menonaktifkan logging (dalam log4j):
Gunakan yang berikut ini
conf/log4j.properties
untuk menonaktifkan sepenuhnya logging:Referensi: Mastering Spark oleh Jacek Laskowski.
sumber
Mudah dilakukan di baris perintah ...
spark2-submit --driver-java-options="-Droot.logger=ERROR,console"
..pilihan lain..sumber
spark2-submit
?Cukup tambahkan param di bawah ini ke perintah spark-shell ATAU spark-submit Anda
Periksa nama properti yang tepat (log4jspark.root.logger di sini) dari file log4j.properties. Semoga ini bisa membantu, tepuk tangan!
sumber
Ide yang menarik adalah menggunakan RollingAppender seperti yang disarankan di sini: http://shzhangji.com/blog/2015/05/31/spark-streaming-logging-configuration/ sehingga Anda tidak "mencemari" ruang konsol, tetapi masih dapat melihat hasilnya di bawah $ YOUR_LOG_PATH_HERE / $ {dm.logging.name} .log.
Metode lain yang memecahkan penyebabnya adalah dengan mengamati jenis pembalakan apa yang biasanya Anda miliki (berasal dari modul dan dependensi yang berbeda), dan mengatur masing-masing rincian untuk pembalakan, sambil memutar log "pihak ketiga" yang sunyi "yang terlalu bertele-tele:
Misalnya,
sumber
sumber
sumber
val rootLogger = Logger.getRootLogger() rootLogger.setLevel(Level.ERROR)
berhasilSelain semua posting di atas, inilah yang memecahkan masalah bagi saya.
Spark menggunakan slf4j untuk mengikat ke penebang. Jika log4j bukan pengikatan pertama yang ditemukan, Anda dapat mengedit file log4j.properties seperti yang Anda inginkan, para logger bahkan tidak digunakan. Misalnya, ini bisa menjadi output SLF4J yang mungkin:
Jadi di sini SimpleLoggerFactory digunakan, yang tidak peduli dengan pengaturan log4j.
Tidak termasuk paket slf4j-simple dari proyek saya via
menyelesaikan masalah, karena sekarang log4j mengikat logger digunakan dan pengaturan apa pun di log4j.properties dipatuhi. FYI file properti log4j saya berisi (selain konfigurasi normal)
Semoga ini membantu!
sumber
Yang ini berhasil untuk saya. Hanya pesan ERROR yang ditampilkan
stdout
,log4j.properties
file mungkin terlihat seperti:sumber
Jika Anda tidak memiliki kemampuan untuk mengedit kode java untuk menyisipkan
.setLogLevel()
pernyataan dan Anda tidak ingin lebih banyak file eksternal untuk digunakan, Anda dapat menggunakan cara brute force untuk menyelesaikannya. Cukup filter garis INFO menggunakan grep.sumber
Jika ada orang lain yang terjebak dalam hal ini,
tidak ada yang di atas bekerja untuk saya. Saya harus menghapus
dari build.gradle saya agar log hilang. TLDR: Jangan mengimpor kerangka logging lain, Anda harus baik-baik saja hanya menggunakan
org.apache.log4j.Logger
sumber
Cara lain untuk sepenuhnya menghentikan log adalah:
Ini berhasil untuk saya. NullAppender adalah
sumber