Làm cách nào để dừng tin nhắn INFO hiển thị trên bảng điều khiển tia lửa?


180

Tôi muốn dừng các tin nhắn khác nhau đang xuất hiện trên lớp vỏ tia lửa.

Tôi đã cố chỉnh sửa log4j.propertiestập tin để dừng những tin nhắn này.

Dưới đây là nội dung của 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

Nhưng tin nhắn vẫn đang được hiển thị trên bàn điều khiển.

Dưới đây là một số thông điệp ví dụ

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

Làm thế nào để tôi dừng những thứ này?

Câu trả lời:


168

Chỉnh sửa conf/log4j.propertiestập tin của bạn và thay đổi dòng sau:

log4j.rootCategory=INFO, console

đến

log4j.rootCategory=ERROR, console

Một cách tiếp cận khác là:

Bắt đầu spark-shell và gõ như sau:

import org.apache.log4j.Logger
import org.apache.log4j.Level

Logger.getLogger("org").setLevel(Level.OFF)
Logger.getLogger("akka").setLevel(Level.OFF)

Bạn sẽ không thấy bất kỳ nhật ký nào sau đó.

Các tùy chọn khác để lên Level bao gồm: all, debug, error, fatal, info, off, trace, trace_int,warn

Chi tiết về từng có thể được tìm thấy trong các tài liệu.


15
Tôi nghĩ rằng TẮT quá hạn chế. WARN hoặc ERROR có thể phù hợp hơn ở đây.
tuyết rơi

2
Thêm vào đó trong các dự án của bạn Lớp chính.
AkhlD

2
Câu trả lời chính xác. Bất kỳ cách nào để làm điều tương tự từ PySpark theo lập trình?
Tagar

2
Phần lập trình của điều này không hoạt động. Thay vào đó, hãy xem câu trả lời này từ @cantdutchthis stackoverflow.com/a/37836847/1056563
javadba

1
@AkhlD này là ai?
Aviad Klein

151

Ngay sau khi bắt đầu spark-shellloại;

sc.setLogLevel("ERROR")

Trong Spark 2.0 (Scala):

spark = SparkSession.builder.getOrCreate()
spark.sparkContext.setLogLevel("ERROR")

Tài liệu API: https://spark.apache.org/docs/2.2.0/api/scala/index.html#org.apache.spark.sql.SparkSession

Đối với Java:

spark = SparkSession.builder.getOrCreate();
spark.sparkContext().setLogLevel("ERROR");

Làm thế nào bạn sẽ thiết lập tài sản này trong một chương trình?
Alex Raj Kaliamoorthy

Đây chỉ là avaibale cho spark.sql.SparkSession hoặc cũng là avaibale cho JavaSparkContext ??
SharpLu

Có, nó có sẵn cho JavaSparkContext . Cảm ơn, @cantdutchthis. Điều này đã làm phiền tôi trong một thời gian.
alan

1
Đây là câu trả lời duy nhất phù hợp với tôi mà không tạo log4j riêng. cảm ơn!
abhihello123

2
Nó hoạt động với tôi, tuy nhiên tôi vẫn nhận được một vài tin nhắn khi bắt đầu bài kiểm tra của mình. Bất kỳ ý tưởng?

46

Cảm ơn @AkhlD và @Sachin Janani đã đề xuất thay đổi trong .conftệp.

Mã sau đã giải quyết vấn đề của tôi:

1) Đã thêm import org.apache.log4j.{Level, Logger}trong phần nhập

2) Đã thêm dòng sau khi tạo đối tượng bối cảnh tia lửa, tức là sau val sc = new SparkContext(conf):

val rootLogger = Logger.getRootLogger()
rootLogger.setLevel(Level.ERROR)

12
Đã thử điều này nhưng vẫn nhận được kết quả đăng nhập.
horatio1701d

1
Tôi thích giải pháp này vì không được phép truy cập conf /
Jim Ho

31

Sử dụng lệnh bên dưới để thay đổi cấp độ nhật ký trong khi gửi ứng dụng bằng cách sử dụng spark-submit hoặc spark-sql:

spark-submit \
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:<file path>/log4j.xml" \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:<file path>/log4j.xml"

Lưu ý: thay thế <file path>nơi log4jtập tin cấu hình được lưu trữ.

Log4j.properies:

log4j.rootLogger=ERROR, console

# set the log level for these components
log4j.logger.com.test=DEBUG
log4j.logger.org=ERROR
log4j.logger.org.apache.spark=ERROR
log4j.logger.org.spark-project=ERROR
log4j.logger.org.apache.hadoop=ERROR
log4j.logger.io.netty=ERROR
log4j.logger.org.apache.zookeeper=ERROR

# add a ConsoleAppender to the logger stdout to write to the console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
# use a simple message format
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
   <appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out"/>
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
    </layout>
  </appender>
    <logger name="org.apache.spark">
        <level value="error" />
    </logger>
    <logger name="org.spark-project">
        <level value="error" />
    </logger>
    <logger name="org.apache.hadoop">
        <level value="error" />
    </logger>
    <logger name="io.netty">
        <level value="error" />
    </logger>
    <logger name="org.apache.zookeeper">
        <level value="error" />
    </logger>
   <logger name="org">
        <level value="error" />
    </logger>
    <root>
        <priority value ="ERROR" />
        <appender-ref ref="console" />
    </root>
</log4j:configuration>

Chuyển sang FileAppender trong log4j.xml nếu bạn muốn ghi nhật ký vào tệp thay vì bảng điều khiển. LOG_DIRlà một biến cho thư mục bản ghi mà bạn có thể cung cấp bằng cách sử dụng spark-submit --conf "spark.driver.extraJavaOptions=-D.

<appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="${LOG_DIR}"/>
        <param name="datePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/>
        </layout>
    </appender>

Một điều quan trọng khác cần hiểu ở đây là, khi công việc được khởi chạy ở chế độ phân tán (cụm chế độ triển khai và chủ như sợi hoặc mesos), tệp cấu hình log4j sẽ tồn tại trên các nút trình điều khiển và worker ( log4j.configuration=file:<file path>/log4j.xml) nếu không log4j init sẽ phàn nàn-

log4j: ERROR Không thể đọc tệp cấu hình [log4j.properIES]. java.io.FileNotFoundException: log4j.properIES (Không có tệp hoặc thư mục như vậy)

Gợi ý giải quyết vấn đề này-

Giữ tệp cấu hình log4j trong hệ thống tệp phân tán (HDFS hoặc mesos) và thêm cấu hình bên ngoài bằng log4j PropertyConfigurator . hoặc sử dụng sparkContext addFile để làm cho nó có sẵn trên mỗi nút, sau đó sử dụng log4j PropertyConfigurator để tải lại cấu hình.


2
Đây là một trong số ít các ví dụ không orgghi đè tất cả các bản ghi theo truyền thống từ trình ghi nhật ký mặc định.
đào sâu

1
Điều này hoạt động rất tốt, nhưng các Log4j.propertiestập tin để làm gì? Nó dường như không được sử dụng. Bạn chỉ đơn giản là ghi lại các thuộc tính được thiết lập trong tệp XML?
vy32

1
Bạn có thể sử dụng một trong hai.
Rahul Sharma

3
Tôi đã thành công với những điều trên - Tôi sử dụng --filestrong lệnh spark-submit để cung cấp log4j.properies trên tất cả các nút.
Ben Watson

1
Đây là giải pháp duy nhất phù hợp với tôi và nó không liên quan đến thay đổi mã. Tạo một file Log4.propertiesdưới main/resourcestrong trường hợp đó nó không tồn tại
Yeikel

29

Tất cả các phương pháp được thu thập với các ví dụ

Giới thiệu

Trên thực tế, có nhiều cách để làm điều đó . Một số khó hơn từ những người khác, nhưng tùy thuộc vào bạn, cái nào phù hợp với bạn nhất. Tôi sẽ cố gắng để giới thiệu tất cả.


# 1 Lập trình trong ứng dụng của bạn

Có vẻ là dễ nhất, nhưng bạn sẽ cần biên dịch lại ứng dụng của mình để thay đổi các cài đặt đó. Cá nhân, tôi không thích nó nhưng nó hoạt động tốt.

Thí dụ:

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)

Bạn có thể đạt được nhiều hơn nữa chỉ bằng cách sử dụng log4jAPI.
Nguồn: [ Tài liệu cấu hình Log4J , phần Cấu hình]


# 2 đèo log4j.propertiestrongspark-submit

Điều này là rất khó khăn, nhưng không phải là không thể. Và yêu thích của tôi.

Log4J trong quá trình khởi động ứng dụng luôn tìm kiếm và tải log4j.propertiestệp từ classpath.

Tuy nhiên, khi sử dụng spark-submitclasspath của Spark Cluster đã được ưu tiên hơn so với classpath của ứng dụng! Đây là lý do tại sao việc đặt tệp này vào hũ mỡ của bạn sẽ không ghi đè cài đặt của cụm!

Thêm -Dlog4j.configuration=<location of configuration file>vào spark.driver.extraJavaOptions (cho trình điều khiển) hoặc
spark.executor.extraJavaOptions (cho người thực thi) .

Lưu ý rằng nếu sử dụng tệp, file:giao thức phải được cung cấp rõ ràng và tệp cần tồn tại cục bộ trên tất cả các nút .

Để đáp ứng điều kiện cuối cùng, bạn có thể tải tệp lên vị trí có sẵn cho các nút (như hdfs) hoặc truy cập tệp cục bộ bằng trình điều khiển nếu sử dụng deploy-mode client. Nếu không thì:

tải lên một tùy chỉnh log4j.propertiesbằng cách sử dụng tia lửa, bằng cách thêm nó vào --filesdanh sách các tệp sẽ được tải lên cùng với ứng dụng.

Nguồn: Tài liệu Spark, Gỡ lỗi

Các bước:

Ví dụ 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

Thực hiện spark-submit, cho chế độ cụm:

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"

Lưu ý rằng bạn phải sử dụng --driver-java-optionsnếu sử dụng clientchế độ. Tài liệu Spark, thời gian chạy env

Thực thi spark-submit, cho chế độ máy khách:

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"

Ghi chú:

  1. Các tệp được tải lên spark-clustervới --filessẽ có sẵn tại thư mục gốc, do đó không cần thêm bất kỳ đường dẫn nào vào file:log4j.properties.
  2. Các tập tin được liệt kê trong --filesphải được cung cấp với đường dẫn tuyệt đối!
  3. file: tiền tố trong cấu hình URI là bắt buộc.

# 3 Chỉnh sửa cụm conf/log4j.properties

Điều này thay đổi tập tin cấu hình đăng nhập toàn cầu .

cập nhật $SPARK_CONF_DIR/log4j.propertiestệp và nó sẽ được tự động tải lên cùng với các cấu hình khác.

Nguồn: Tài liệu Spark, Gỡ lỗi

Để tìm bạn, SPARK_CONF_DIRbạn có thể sử dụng 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

Bây giờ chỉ cần chỉnh sửa /var/lib/spark/latest/conf/log4j.properties(với ví dụ từ phương pháp # 2) và tất cả các ứng dụng của bạn sẽ chia sẻ cấu hình này.


# 4 Thư mục cấu hình ghi đè

Nếu bạn thích giải pháp số 3, nhưng muốn tùy chỉnh nó cho mỗi ứng dụng, bạn thực sự có thể sao chép confthư mục, chỉnh sửa nội dung của nó và chỉ định làm cấu hình gốc trong suốt spark-submit.

Để chỉ định một thư mục cấu hình khác với mặc định “SPARK_HOME/conf”, bạn có thể đặt SPARK_CONF_DIR. Spark sẽ sử dụng các tập tin cấu hình ( spark-defaults.conf, spark-env.sh, log4j.properties, vv ) từ thư mục này.

Nguồn: Spark docs, Cấu hình

Các bước:

  1. Sao chép confthư mục của cụm (thông tin thêm, phương pháp # 3)
  2. Chỉnh sửa log4j.propertiestrong thư mục đó (ví dụ trong phương pháp # 2)
  3. Đặt SPARK_CONF_DIRvào thư mục này, trước khi thực hiện spark-submit,
    ví dụ:

    export SPARK_CONF_DIR=/absolute/path/to/custom/conf
    
    spark-submit \
        --master yarn \
        --deploy-mode cluster \
        --class com.github.atais.Main \
        "SparkApp.jar"
    

Phần kết luận

Tôi không chắc chắn nếu có bất kỳ phương pháp nào khác, nhưng tôi hy vọng điều này bao gồm chủ đề từ A đến Z. Nếu không, hãy thoải mái ping tôi trong các bình luận!

Tận hưởng theo cách của bạn!


Đây phải là câu trả lời được chấp nhận. Nó cung cấp nhiều chi tiết và tổng hợp nhiều trường hợp sử dụng hơn các trường hợp khác. (Không khuyến khích vô hiệu hóa nhật ký.)
belgacea 7/11/19

@Atais - Bạn nên thêm vào bên dưới Vì vậy, nếu bạn giống tôi và thấy rằng các câu trả lời ở trên không có ích, thì có lẽ bạn cũng phải xóa hậu tố '.template' khỏi tệp log4j của bạn và sau đó các hoạt động trên hoàn hảo!
ngày

1
Ghi chú bổ sung về cách tiếp cận theo chương trình - Cấp độ phải được đặt trước khi SparkContext được tạo
Arunraj Nair

@ArunrajNair không nên như vậy, vì đăng nhập là một tính năng riêng biệt, không được kết nối với SparkContext.
Atais

19

Bạn đặt vô hiệu hóa Nhật ký bằng cách đặt mức của nó thành TẮT như sau:

Logger.getLogger("org").setLevel(Level.OFF);
Logger.getLogger("akka").setLevel(Level.OFF);

hoặc chỉnh sửa tệp nhật ký và đặt mức nhật ký thành tắt bằng cách chỉ thay đổi thuộc tính sau:

log4j.rootCategory=OFF, console

Trong tập tin nào tôi đặt thuộc tính trên ??
Vishwas

Bạn có thể thêm những dòng này trong chương trình Driver của bạn @Vishwas
Sachin Janani

Tôi đã thêm cùng nhưng các bản ghi vẫn xuất hiện trên bảng điều khiển
Vishwas

Bạn có thay đổi thuộc tính log4j.rootC Category = OFF. Tôi đã thử nghiệm những thứ này vào cuối của tôi và nó hoạt động tốt
Sachin Janani

3
Điều này tạo ra sự khác biệt đối với tôi trên Spark 2.3.1
Toby Eggitt

15

Tôi chỉ cần thêm dòng này vào tất cả các tập lệnh pyspark của tôi trên đầu ngay bên dưới các báo cáo nhập khẩu.

SparkSession.builder.getOrCreate().sparkContext.setLogLevel("ERROR")

ví dụ tiêu đề của tập lệnh pyspark của tôi

from pyspark.sql import SparkSession, functions as fs
SparkSession.builder.getOrCreate().sparkContext.setLogLevel("ERROR")

13
Điều này hoạt động, nhưng nó không dừng 58 dòng thông báo INFO xuất hiện trong quá trình tạo bối cảnh Spark.
vy32

1
Lưu ý rằng đây là dành cho Spark 2.x
Yeikel

13

Câu trả lời ở trên là chính xác nhưng không chính xác giúp tôi vì tôi cần thêm thông tin.

Tôi vừa thiết lập Spark nên tệp log4j vẫn có hậu tố '.template' và không được đọc. Tôi tin rằng đăng nhập sau đó mặc định là Spark core log.

Vì vậy, nếu bạn giống như tôi và thấy rằng các câu trả lời ở trên không có ích, thì có lẽ bạn cũng phải xóa hậu tố '.template' khỏi tệp log4j của bạn và sau đó các hoạt động trên hoàn hảo!

http://apache-spark-user-list.1001560.n3.nabble.com/disable-log4j-for-spark-shell-td11278.html


Vui lòng kiểm tra câu trả lời này, stackoverflow.com/a/51554118/2094086 hy vọng bạn đang tìm kiếm điều tương tự.
Gaurav Adurkar

5

Trong Python / Spark chúng ta có thể làm:

def quiet_logs( sc ):
  logger = sc._jvm.org.apache.log4j
  logger.LogManager.getLogger("org"). setLevel( logger.Level.ERROR )
  logger.LogManager.getLogger("akka").setLevel( logger.Level.ERROR )

Sau khi xác định Sparkcontaxt 'sc' gọi hàm này bằng cách: quiet_logs (sc)


Tôi muốn tìm một cách lập trình hoạt động mà không gây rối với tệp log4j - nhưng khi tôi thử điều đó, tôi vẫn nhận được các cảnh báo như WARN org.apache.spark.scheduler.TaskSetManager: Mất nhiệm vụ 612.1 trong giai đoạn 0.0 (TID 2570 ..., giám đốc điều hành 15): TaskKills (một thái độ khác
MrCartoonology

5

tl; dr

Đối với bối cảnh Spark bạn có thể sử dụng:

sc.setLogLevel(<logLevel>)

nơi loglevelcó thể là TẤT CẢ, DEBUG, ERROR, FATAL, INFO, OFF, TRACE hoặc WARN.


Chi tiết-

Trong nội bộ, setLogLevelcác cuộc gọi org.apache.log4j.Level.toLevel(logLevel)mà sau đó nó sử dụng để thiết lập bằng cách sử dụng org.apache.log4j.LogManager.getRootLogger().setLevel(level).

Bạn có thể trực tiếp đặt mức ghi nhật ký để OFFsử dụng:

LogManager.getLogger("org").setLevel(Level.OFF)

Bạn có thể thiết lập đăng nhập mặc định cho Spark shell conf/log4j.properties. Sử dụng conf/log4j.properties.templatenhư một điểm khởi đầu.

Đặt mức nhật ký trong ứng dụng Spark

Trong các ứng dụng Spark độc lập hoặc trong phiên Spark Shell, hãy sử dụng như sau:

import org.apache.log4j.{Level, Logger}

Logger.getLogger(classOf[RackResolver]).getLevel
Logger.getLogger("org").setLevel(Level.OFF)
Logger.getLogger("akka").setLevel(Level.OFF)

Vô hiệu hóa đăng nhập (trong log4j):

Sử dụng như sau conf/log4j.propertiesđể vô hiệu hóa đăng nhập hoàn toàn:

log4j.logger.org=OFF

Tham khảo: Làm chủ Spark của Jacek Laskowski.


3

Chỉ cần thêm param dưới đây vào lệnh spark-shell HOẶC spark-submit của bạn

--conf "spark.driver.extraJavaOptions=-Dlog4jspark.root.logger=WARN,console"

Kiểm tra tên thuộc tính chính xác (log4jspark.root.logger tại đây) từ tệp log4j.properIES. Hy vọng điều này sẽ giúp, chúc mừng!


1
Để thiết lập điều này từ dòng lệnh sẽ là tuyệt vời. Nhưng điều này không làm việc cho tôi.
swdev

2

Một ý tưởng thú vị là sử dụng chương trình Cán bộ như được đề xuất tại đây: http://shzhangji.com/blog/2015/05/31/spark-streaming-logging-configuration/ để bạn không "đánh bóng" không gian bảng điều khiển, nhưng vẫn có thể xem kết quả dưới $ YOU_LOG_PATH_HERE / $ {dm.logging.name} .log.

    log4j.rootLogger=INFO, rolling

log4j.appender.rolling=org.apache.log4j.RollingFileAppender
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
log4j.appender.rolling.layout.conversionPattern=[%d] %p %m (%c)%n
log4j.appender.rolling.maxFileSize=50MB
log4j.appender.rolling.maxBackupIndex=5
log4j.appender.rolling.file=$YOUR_LOG_PATH_HERE/${dm.logging.name}.log
log4j.appender.rolling.encoding=UTF-8

Một phương pháp khác để giải quyết nguyên nhân là quan sát loại loggings nào bạn thường có (đến từ các mô-đun và phụ thuộc khác nhau) và đặt cho từng mức độ chi tiết cho việc ghi nhật ký, trong khi chuyển nhật ký của bên thứ ba "im lặng" quá dài dòng:

Ví dụ,

    # Silence akka remoting
log4j.logger.Remoting=ERROR
log4j.logger.akka.event.slf4j=ERROR
log4j.logger.org.spark-project.jetty.server=ERROR
log4j.logger.org.apache.spark=ERROR
log4j.logger.com.anjuke.dm=${dm.logging.level}
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

2

Đơn giản để thực hiện trên dòng lệnh ...

spark2-submit --driver-java-options="-Droot.logger=ERROR,console" ..sự lựa chọn khác..


spark2-submit
vy32

Spark2-submit được sử dụng cho Spark2.
Nephilim

0
  1. Điều chỉnh conf / log4j.properies như được mô tả bởi log4j.rootC Category = ERROR, bảng điều khiển khác
  2. Hãy chắc chắn trong khi thực hiện công việc tia lửa của bạn, bạn vượt qua cờ --file với đường dẫn tệp log4j.properIES
  3. Nếu nó vẫn không hoạt động, bạn có thể có một jar có log4j.properies đang được gọi trước log4j.properies mới của bạn. Xóa log4j.properies đó khỏi jar (nếu thích hợp)

0
sparkContext.setLogLevel("OFF")

1
Tôi đã thực hiện cả hai - loại bỏ hậu tố .template khỏi log4j.properies và đặt cấp độ thành LRI, và val rootLogger = Logger.getRootLogger() rootLogger.setLevel(Level.ERROR) nó đã hoạt động
Sam-T

0

Ngoài tất cả các bài viết trên, đây là những gì đã giải quyết vấn đề cho tôi.

Spark sử dụng slf4j để liên kết với loggers. Nếu log4j không phải là ràng buộc đầu tiên được tìm thấy, bạn có thể chỉnh sửa các tệp log4j.properIES tất cả những gì bạn muốn, loggers thậm chí không được sử dụng. Ví dụ: đây có thể là đầu ra SLF4J có thể:

SLF4J: Đường dẫn lớp chứa nhiều ràng buộc SLF4J. SLF4J: Tìm thấy ràng buộc trong [jar: file: / C: /Users/~/.m2/reposeective/org/slf4j/slf4j-simple/1.6.6/slf4j-simple-1.6.6.jar! / Org / slf4j / impl / StaticLoggerBinder. class] SLF4J: Tìm thấy ràng buộc trong [jar: file: / C: /Users/~/.m2/reposeective/org/slf4j/slf4j-log4j12/1.7.19/slf4j-log4j12-1.7.19.jar ! /org/slf4j/impl/StaticLoggerBinder. class] SLF4J: Xem http://www.slf4j.org/codes.html#mult Môn_bindings để được giải thích. SLF4J: Liên kết thực tế thuộc loại [org.slf4j.impl.SimpleLoggerFactory]

Vì vậy, ở đây SimpleLoggerFactory đã được sử dụng, không quan tâm đến cài đặt log4j.

Không bao gồm gói slf4j đơn giản từ dự án của tôi thông qua

<dependency>
        ...
        <exclusions>
            ...
            <exclusion>
                <artifactId>slf4j-simple</artifactId>
                <groupId>org.slf4j</groupId>
            </exclusion>
        </exclusions>
    </dependency>

đã giải quyết vấn đề, vì bây giờ liên kết logger log4j được sử dụng và mọi cài đặt trong log4j.properies đều được tuân thủ. FYI tệp thuộc tính log4j của tôi chứa (bên cạnh cấu hình bình thường)

log4j.rootLogger=WARN, stdout
...
log4j.category.org.apache.spark = WARN
log4j.category.org.apache.parquet.hadoop.ParquetRecordReader = FATAL
log4j.additivity.org.apache.parquet.hadoop.ParquetRecordReader=false
log4j.logger.org.apache.parquet.hadoop.ParquetRecordReader=OFF

Hi vọng điêu nay co ich!


0

Cái này làm việc cho tôi Đối với chỉ các thông báo LRI được hiển thị dưới dạng stdout, log4j.propertiestệp có thể trông như sau:

# Root logger option
log4j.rootLogger=ERROR, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

LƯU Ý: Đặt log4j.propertiestệp trong src/main/resourcesthư mục để có hiệu quả. Và nếu log4j.propertieskhông tồn tại (có nghĩa sparklà đang sử dụng log4j-defaults.propertiestệp) thì bạn có thể tạo nó bằng cách đi đến SPARK_HOME/confvà sau mv log4j.properties.template log4j.propertiesđó tiến hành các thay đổi đã nói ở trên.


0

Nếu bạn không có khả năng chỉnh sửa mã java để chèn các .setLogLevel()câu lệnh và bạn không muốn có thêm các tệp bên ngoài để triển khai, bạn có thể sử dụng một cách mạnh mẽ để giải quyết vấn đề này. Chỉ cần lọc các dòng INFO bằng grep.

spark-submit --deploy-mode client --master local <rest-of-cmd> | grep -v -F "INFO"

0

Nếu bất cứ ai khác bị mắc kẹt trên này,

Không có gì ở trên làm việc cho tôi. Tôi phải xóa

implementation group: "ch.qos.logback", name: "logback-classic", version: "1.2.3"
implementation group: 'com.typesafe.scala-logging', name: "scala-logging_$scalaVersion", version: '3.9.2'

từ build.gradle của tôi để các bản ghi biến mất. TLDR: Không nhập bất kỳ khung đăng nhập nào khác, bạn sẽ ổn nếu chỉ sử dụngorg.apache.log4j.Logger


0

Một cách khác để dừng nhật ký hoàn toàn là:

    import org.apache.log4j.Appender;
    import org.apache.log4j.BasicConfigurator;
    import org.apache.log4j.varia.NullAppender;

    public class SomeClass {

        public static void main(String[] args) {
            Appender nullAppender = new NullAppender();
            BasicConfigurator.configure(nullAppender);

            {...more code here...}

        }
    }

Điều này làm việc cho tôi. Một NullAppender là

Một Appender mà bỏ qua các sự kiện đăng nhập. ( https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/appender/NullAppender.html )

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.