스파크에서 정보 로깅을 해제하는 방법은 무엇입니까?
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.template
conf/log4j.properties
스파크 디르에서.
log4j.properties
, 변경log4j.rootCategory=INFO, console
log4j.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
'programing' 카테고리의 다른 글
Nodejs 암호화 형식 스크립트 파일 (0) | 2023.06.11 |
---|---|
firebase-tools "-firebase: firebase: 명령을 찾을 수 없습니다." (0) | 2023.06.06 |
디버그 모드에서 새 Firebase Crashlytics 사용 안 함 (0) | 2023.06.06 |
Float 및 google_sign_in 플러그인:플랫폼예외(sign_in_failed, com.google.android.gms.common.api).ApiException: 10: , null) (0) | 2023.06.06 |
WPF 창이 닫혔는지 어떻게 알 수 있습니까? (0) | 2023.06.06 |