programing

스파크에서 정보 로깅을 해제하는 방법은 무엇입니까?

skycolor 2023. 6. 6. 08:09
반응형

스파크에서 정보 로깅을 해제하는 방법은 무엇입니까?

AWS EC2 가이드를 사용하여 스파크를 설치했고 프로그램을 잘 실행할 수 있습니다.bin/pyspark스크립트를 사용하여 스파크 프롬프트로 이동하고 빠른 시작을 성공적으로 종료할 수도 있습니다.

하지만, 나는 어떻게 모든 장황한 이야기를 멈출 수 있는지 아무리 해도 알아낼 수 없습니다.INFO각 명령 뒤에 로깅이 필요로 합니다.

아래 코드(댓글 출력, OFF로 설정)에서 가능한 거의 모든 시나리오를 사용해 보았습니다.log4j.properties에 철하다.conf각 노드에서 뿐만 아니라 응용 프로그램을 실행하지만 아무 것도 수행하지 않는 폴더입니다.아직도 기록이 남아 있습니다.INFO각 문을 실행한 후에 출력되는 문입니다.

나는 이것이 어떻게 작동해야 하는지 매우 혼란스럽습니다.

#Set everything to be logged to the console log4j.rootCategory=INFO, 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.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO

사용할 때의 전체 클래스 경로입니다.SPARK_PRINT_LAUNCH_COMMAND:

스파크 명령: /Library/Java/Java 가상 시스템/jdk1.8.0_05.jdk/내용/홈/bin/java -cp :/root/spark-1.0.1-bin-hadoop2/conf: /root/syslog-1.0.1-bin-syslog2/conf: /root/syslog-1.0.1-syslog-assembly-1.0.1-syslog2.2.0.jar:/root/syslog-1.0.1.1-bin-syslog2.1.jar:/datanucleus-api-api-jar-3.1.1.1.1.1.1.1.bin-bin-2.jar:/syslogin-path= -Xms512m -Xmx512m org.sys.message.deploy.SparkSubmit spark-shell --class org.apache.spark.repl.주된

의 내용.spark-env.sh:

#!/usr/bin/env bash

# This file is sourced when running various Spark programs.
# Copy it as spark-env.sh and edit that to configure Spark for your site.

# Options read when launching programs locally with 
# ./bin/run-example or ./bin/spark-submit
# - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
# - SPARK_LOCAL_IP, to set the IP address Spark binds to on this node
# - SPARK_PUBLIC_DNS, to set the public dns name of the driver program
# - SPARK_CLASSPATH=/root/spark-1.0.1-bin-hadoop2/conf/

# Options read by executors and drivers running inside the cluster
# - SPARK_LOCAL_IP, to set the IP address Spark binds to on this node
# - SPARK_PUBLIC_DNS, to set the public DNS name of the driver program
# - SPARK_CLASSPATH, default classpath entries to append
# - SPARK_LOCAL_DIRS, storage directories to use on this node for shuffle and RDD data
# - MESOS_NATIVE_LIBRARY, to point to your libmesos.so if you use Mesos

# Options read in YARN client mode
# - HADOOP_CONF_DIR, to point Spark towards Hadoop configuration files
# - SPARK_EXECUTOR_INSTANCES, Number of workers to start (Default: 2)
# - SPARK_EXECUTOR_CORES, Number of cores for the workers (Default: 1).
# - SPARK_EXECUTOR_MEMORY, Memory per Worker (e.g. 1000M, 2G) (Default: 1G)
# - SPARK_DRIVER_MEMORY, Memory for Master (e.g. 1000M, 2G) (Default: 512 Mb)
# - SPARK_YARN_APP_NAME, The name of your application (Default: Spark)
# - SPARK_YARN_QUEUE, The hadoop queue to use for allocation requests (Default: ‘default’)
# - SPARK_YARN_DIST_FILES, Comma separated list of files to be distributed with the job.
# - SPARK_YARN_DIST_ARCHIVES, Comma separated list of archives to be distributed with the job.

# Options for the daemons used in the standalone deploy mode:
# - SPARK_MASTER_IP, to bind the master to a different IP address or hostname
# - SPARK_MASTER_PORT / SPARK_MASTER_WEBUI_PORT, to use non-default ports for the master
# - SPARK_MASTER_OPTS, to set config properties only for the master (e.g. "-Dx=y")
# - SPARK_WORKER_CORES, to set the number of cores to use on this machine
# - SPARK_WORKER_MEMORY, to set how much total memory workers have to give executors (e.g. 1000m, 2g)
# - SPARK_WORKER_PORT / SPARK_WORKER_WEBUI_PORT, to use non-default ports for the worker
# - SPARK_WORKER_INSTANCES, to set the number of worker processes per node
# - SPARK_WORKER_DIR, to set the working directory of worker processes
# - SPARK_WORKER_OPTS, to set config properties only for the worker (e.g. "-Dx=y")
# - SPARK_HISTORY_OPTS, to set config properties only for the history server (e.g. "-Dx=y")
# - SPARK_DAEMON_JAVA_OPTS, to set config properties for all daemons (e.g. "-Dx=y")
# - SPARK_PUBLIC_DNS, to set the public dns name of the master or workers

export SPARK_SUBMIT_CLASSPATH="$FWDIR/conf"

스파크 디렉토리에서 다음 명령을 실행합니다.

cp conf/log4j.properties.template conf/log4j.properties

log4j.properties 편집:

# Set everything to be logged to the console
log4j.rootCategory=INFO, 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

첫 번째 줄에서 대체:

log4j.rootCategory=INFO, console

기준:

log4j.rootCategory=WARN, console

셸을 저장하고 다시 시작합니다.OS X의 Spark 1.1.0과 Spark 1.5.1에서 작동합니다.

스파크 2.0에서는 setLogLevel:

    from pyspark.sql import SparkSession
    spark = SparkSession.builder.\
        master('local').\
        appName('foo').\
        getOrCreate()
    spark.sparkContext.setLogLevel('WARN')

pyspark 콘솔에서 기본값spark세션을 이미 사용할 수 있습니다.

pyspark/tests.py 에서 영감을 받아 했습니다.

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 )

SparkContext를 만든 직후 이를 호출하면 테스트에 기록된 stderr 줄이 2647에서 163으로 줄어듭니다.그러나 SparkContext 자체를 생성하는 경우 로그 163, 최대

15/08/25 10:14:16 INFO SparkDeploySchedulerBackend: SchedulerBackend is ready for scheduling beginning after reached minRegisteredResourcesRatio: 0.0

프로그래밍 방식으로 조정하는 방법은 잘 모르겠습니다.

conf/log4j.properties 파일을 편집하고 다음 행을 변경합니다.

   log4j.rootCategory=INFO, console

로.

    log4j.rootCategory=ERROR, console

또 다른 접근 방식은 다음과 같습니다.

스파크 셸을 실행하고 다음을 입력합니다.

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

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

그 후에는 로그가 표시되지 않습니다.

>>> log4j = sc._jvm.org.apache.log4j
>>> log4j.LogManager.getRootLogger().setLevel(log4j.Level.ERROR)

경우 PySpark의 .sc.setLogLevel("FATAL")문서에서:

로그 수준을 제어합니다.그러면 사용자 정의 로그 설정이 재정의됩니다.유효한 로그 수준은 ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN입니다.

setLogLevel을 사용할 수 있습니다.

val spark = SparkSession
      .builder()
      .config("spark.master", "local[1]")
      .appName("TestLog")
      .getOrCreate()

spark.sparkContext.setLogLevel("WARN")

스파크의 클래스 경로 계산 방식 때문일 수 있습니다.제 예감은 하둡의log4j.properties파일이 클래스 경로의 스파크 앞에 나타나 변경 내용을 적용할 수 없습니다.

실행하는 경우

SPARK_PRINT_LAUNCH_COMMAND=1 bin/spark-shell

그러면 스파크가 셸을 시작하는 데 사용되는 전체 클래스 경로를 인쇄합니다. 제 경우에는, 알겠습니다.

Spark Command: /usr/lib/jvm/java/bin/java -cp :::/root/ephemeral-hdfs/conf:/root/spark/conf:/root/spark/lib/spark-assembly-1.0.0-hadoop1.0.4.jar:/root/spark/lib/datanucleus-api-jdo-3.2.1.jar:/root/spark/lib/datanucleus-core-3.2.2.jar:/root/spark/lib/datanucleus-rdbms-3.2.1.jar -XX:MaxPermSize=128m -Djava.library.path=:/root/ephemeral-hdfs/lib/native/ -Xms512m -Xmx512m org.apache.spark.deploy.SparkSubmit spark-shell --class org.apache.spark.repl.Main

/root/ephemeral-hdfs/conf클래스 경로의 선두에 있습니다.

다음 릴리스에서 이 문제를 해결하기 위해 [SPARK-2913] 문제를 열었습니다(곧 패치를 적용해야 합니다).

그 동안 몇 가지 해결 방법은 다음과 같습니다.

  • 더하다export SPARK_SUBMIT_CLASSPATH="$FWDIR/conf"spark-env.sh.
  • 이름 변경)/root/ephemeral-hdfs/conf/log4j.properties.

아래 파라미터를 스파크-제출 명령에 추가하기만 하면 됩니다.

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

그러면 해당 작업에 대해서만 시스템 값이 일시적으로 재정의됩니다.log4j.properties 파일에서 정확한 속성 이름(여기서는 log4jspark.root.logger)을 확인합니다.

이것이 도움이 되길 바랍니다, 건배!

스파크 1.6.2:

log4j = sc._jvm.org.apache.log4j
log4j.LogManager.getRootLogger().setLevel(log4j.Level.ERROR)

스파크 2.x:

spark.sparkContext.setLogLevel('WARN')

(Spark 세션에서 스파크)

또는 이전의 방법,

이름 바꾸기conf/log4j.properties.templateconf/log4j.properties스파크 디르에서.

log4j.properties, 변경log4j.rootCategory=INFO, consolelog4j.rootCategory=WARN, console

사용 가능한 로그 수준:

  • OFF(가장 구체적이고 기록 없음)
  • FATAL(가장 구체적이고 적은 데이터)
  • 오류 - 오류가 발생한 경우에만 기록
  • 경고 - 경고 또는 오류가 발생한 경우에만 기록
  • 정보(기본값)
  • 디버그 - 세부 정보 단계(및 위에 설명된 모든 로그)를 기록합니다.
  • TRACE(가장 구체적이지 않고 많은 데이터)
  • ALL(최소한의 데이터, 모든 데이터)

프로그래밍 방식

spark.sparkContext.setLogLevel("WARN")

사용 가능한 옵션

ERROR
WARN 
INFO 

저는 이것을 마스터 1개와 슬레이브 2개가 있는 Amazon EC2와 스파크 1.2.1과 함께 사용했습니다.

# Step 1. Change config file on the master node
nano /root/ephemeral-hdfs/conf/log4j.properties

# Before
hadoop.root.logger=INFO,console
# After
hadoop.root.logger=WARN,console

# Step 2. Replicate this change to slaves
~/spark-ec2/copy-dir /root/ephemeral-hdfs/conf/

제 방식은 다음과 같습니다.

에서 내가운는위서치에하영을 합니다.spark-submit do.do.do.do.

$ cp /etc/spark/conf/log4j.properties .
$ nano log4j.properties

INFO한 다음 "" "" " " " " 을 합니다.spark-submit

로깅(Python용 로깅 기능)을 계속 사용하려면 애플리케이션과 스파크용 구성을 분할해 보십시오.

LoggerManager()
logger = logging.getLogger(__name__)
loggerSpark = logging.getLogger('py4j')
loggerSpark.setLevel('WARNING')

다음은 scala 사용자를 위한 코드 조각입니다.

옵션 1:

파일 수준에서 추가할 수 있는 아래 스니펫

import org.apache.log4j.{Level, Logger}
Logger.getLogger("org").setLevel(Level.WARN)

옵션 2:

참고: 스파크 세션을 사용하는 모든 애플리케이션에 적용됩니다.

import org.apache.spark.sql.SparkSession

  private[this] implicit val spark = SparkSession.builder().master("local[*]").getOrCreate()

spark.sparkContext.setLogLevel("WARN")

옵션 3:

참고: 이 구성을 log4j.properties에 추가해야 합니다.모듈 수준에서 변경하는 경우 /etc/syslog/conf/log4j.properties(스파크 설치 위치) 또는 프로젝트 폴더 수준 log4j.properties(로그4j.properties)일 수 있습니다.이것은 모든 응용 프로그램에 적용됩니다.

log4j.rootCategory=ERROR, console

IMHO, 옵션 1은 파일 수준에서 끌 수 있으므로 현명한 방법입니다.

프로그램을 시작할 때 프로그래밍 방식으로 이렇게 설정할 수도 있습니다.

Logger.getLogger("org").setLevel(Level.WARN)

언급URL : https://stackoverflow.com/questions/25193488/how-to-turn-off-info-logging-in-spark

반응형