[PYTHON] Spark에서 INFO 로깅을 끄는 방법은 무엇입니까?
PYTHONSpark에서 INFO 로깅을 끄는 방법은 무엇입니까?
AWS EC2 가이드를 사용하여 Spark를 설치했으며 bin / pyspark 스크립트를 사용하여 프로그램을 실행하여 spark 프롬프트를 표시하고 Quick Start를 성공적으로 완료 할 수 있습니다.
그러나 필자는 필자의 삶에 대해 각 명령 후에 자세한 INFO 로깅을 모두 중지하는 방법을 생각할 수 없습니다.
나는 log4j.properties 내의 log4j.properties 파일 내에서 아래의 코드에서 가능한 모든 시나리오를 시도했다. (off로 설정하는 것으로 주석을 달았다.) 각 노드뿐만 아니라 아무것도 실행하지 않는 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를 사용할 때 여기 전체 클래스 패스가 있습니다 :
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"
해결법
-
==============================
1.다음 명령을 spark 디렉토리에서 실행하십시오 :
다음 명령을 spark 디렉토리에서 실행하십시오 :
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
쉘을 저장하고 다시 시작하십시오. 그것은 나를 위해 스파크 1.1.0 및 스파크 1.5.1 OS X에서 작동합니다.
-
==============================
2.내가했던 pyspark / tests.py에서 영감을 얻었다.
내가했던 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를 생성 한 직후 이것을 호출하면 내 testfrom 2647에서 163으로 기록 된 stderr 행이 줄어 들었습니다. 그러나 SparkContext 자체를 작성하면 163
15/08/25 10:14:16 INFO SparkDeploySchedulerBackend: SchedulerBackend is ready for scheduling beginning after reached minRegisteredResourcesRatio: 0.0
그리고 그것들을 프로그래밍 방식으로 조정하는 방법이 나에게 분명하지 않다.
-
==============================
3.conf / log4j.properties 파일을 편집하고 다음 행을 변경하십시오.
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)
그 후에는 로그가 표시되지 않습니다.
-
==============================
4.
>>> log4j = sc._jvm.org.apache.log4j >>> log4j.LogManager.getRootLogger().setLevel(log4j.Level.ERROR)
-
==============================
5.sc.setLogLevel ( "FATAL")을 사용하여 스크립트의 로그 수준을 설정할 수도 있습니다. 문서에서 :
sc.setLogLevel ( "FATAL")을 사용하여 스크립트의 로그 수준을 설정할 수도 있습니다. 문서에서 :
-
==============================
6.Spark 2.0에서는 setLogLevel을 사용하여 애플리케이션에 동적으로 설정할 수 있습니다.
Spark 2.0에서는 setLogLevel을 사용하여 애플리케이션에 동적으로 설정할 수 있습니다.
from pyspark.sql import SparkSession spark = SparkSession.builder.\ master('local').\ appName('foo').\ getOrCreate() spark.sparkContext.setLogLevel('WARN')
pyspark 콘솔에서 기본 스파크 세션을 이미 사용할 수 있습니다.
-
==============================
7.이는 Spark에서 클래스 경로를 계산하는 방법 때문일 수 있습니다. 제 직감은 Hadoop의 log4j.properties 파일이 classpath에있는 Spark보다 먼저 나타나서 변경 사항이 적용되지 않는다는 것입니다.
이는 Spark에서 클래스 경로를 계산하는 방법 때문일 수 있습니다. 제 직감은 Hadoop의 log4j.properties 파일이 classpath에있는 Spark보다 먼저 나타나서 변경 사항이 적용되지 않는다는 것입니다.
너가 달리는 경우에
SPARK_PRINT_LAUNCH_COMMAND=1 bin/spark-shell
그러면 Spark은 쉘을 시작하는 데 사용 된 전체 클래스 경로를 인쇄합니다. 내 경우 엔
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는 classpath의 맨 위에 있습니다.
다음 릴리스에서이 문제를 해결하기 위해 [SPARK-2913] 문제를 열었습니다 (곧 패치를 설치해야합니다).
그 동안 다음 몇 가지 해결 방법이 있습니다.
-
==============================
8.저는 이것을 아마존 EC2에서 1 명의 마스터와 2 명의 노예 및 스파크 1.2.1과 함께 사용했습니다.
저는 이것을 아마존 EC2에서 1 명의 마스터와 2 명의 노예 및 스파크 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/
-
==============================
9.스파크 1.6.2 :
스파크 1.6.2 :
log4j = sc._jvm.org.apache.log4j log4j.LogManager.getRootLogger().setLevel(log4j.Level.ERROR)
스파크 2.x :
spark.sparkContext.setLogLevel('WARN')
(SparkSession 인 스파크)
대안으로,
Spark Dir에서 conf / log4j.properties.template의 이름을 conf / log4j.properties로 변경하십시오.
log4j.properties에서 log4j.rootCategory = INFO, console을 log4j.rootCategory = WARN, console로 변경하십시오.
사용 가능한 다른 로그 수준 :
-
==============================
10.내가하는 일은 :
내가하는 일은 :
스파크 제출 스크립트를 실행하는 위치에서
$ cp /etc/spark/conf/log4j.properties . $ nano log4j.properties
INFO를 원하는 로깅 수준으로 변경 한 다음 spark-submit을 실행하십시오.
-
==============================
11.파이썬의 로깅 기능인 로깅을 계속 사용하려면 응용 프로그램과 Spark의 구성을 분할 해보십시오.
파이썬의 로깅 기능인 로깅을 계속 사용하려면 응용 프로그램과 Spark의 구성을 분할 해보십시오.
LoggerManager() logger = logging.getLogger(__name__) loggerSpark = logging.getLogger('py4j') loggerSpark.setLevel('WARNING')
-
==============================
12.spark-submit 명령에 아래 매개 변수를 추가하기 만하면됩니다.
spark-submit 명령에 아래 매개 변수를 추가하기 만하면됩니다.
--conf "spark.driver.extraJavaOptions=-Dlog4jspark.root.logger=WARN,console"
이는 해당 작업에 대해서만 일시적으로 시스템 값을 대체합니다. log4j.properties 파일에서 정확한 특성 이름 (log4jspark.root.logger)을 확인하십시오.
희망이 도움이 환호!
from https://stackoverflow.com/questions/25193488/how-to-turn-off-info-logging-in-spark by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] matplotlib을 사용하여 두 개의 히스토그램을 동시에 플롯합니다. (0) | 2018.10.09 |
---|---|
[PYTHON] Python의 속성에 따라 객체 인스턴스를 비교합니다. (0) | 2018.10.09 |
[PYTHON] 파이썬에서 캐치되지 않은 예외를 로깅하기 (0) | 2018.10.09 |
[PYTHON] 파이썬에서 줄임표 슬라이싱 구문을 어떻게 사용합니까? [복제] (0) | 2018.10.09 |
[PYTHON] 장고 등록 및 장고 프로필, 사용자 정의 양식 사용 (0) | 2018.10.09 |