Instalei o Spark usando o guia da AWS EC2 e posso iniciar o programa com bin/pyspark
precisão usando o script para acessar o prompt do spark e também posso executar o Quick Start com êxito.
No entanto, durante toda a minha vida, não consigo descobrir como interromper todo o INFO
log detalhado após cada comando.
Eu tentei quase todos os cenários possíveis no código abaixo (comentando, configurando como OFF) dentro do meu log4j.properties
arquivo na conf
pasta em que inicio o aplicativo e em cada nó e nada está fazendo nada. Ainda recebo as INFO
instruções de log impressas após a execução de cada instrução.
Estou muito confuso com a forma como isso deve funcionar.
#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
Aqui está o meu caminho de classe completo quando eu uso SPARK_PRINT_LAUNCH_COMMAND
:
Comando Spark: /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/java -cp: /root/spark-1.0.1-bin-hadoop2/conf: /root/spark-1.0.1 -bin-hadoop2 / conf: /root/spark-1.0.1-bin-hadoop2/lib/spark-assembly-1.0.1-hadoop2.2.0.jar: /root/spark-1.0.1-bin-hadoop2/lib /datanucleus-api-jdo-3.2.1.jar:/root/spark-1.0.1-bin-hadoop2/lib/datanucleus-core-3.2.2.jar:/root/spark-1.0.1-bin-hadoop2 /lib/datanucleus-rdbms-3.2.1.jar -XX: MaxPermSize = 128m -Djava.library.path = -Xms512m -Xmx512m org.apache.spark.deploy.SparkSubmit spark-shell --class org.apache.spark. repl.Main
conteúdo de 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"
Respostas:
Basta executar este comando no diretório spark:
Edite log4j.properties:
Substitua na primeira linha:
de:
Salve e reinicie seu shell. Funciona para mim no Spark 1.1.0 e no 1.5.1 no OS X.
fonte
Inspirado pelo pyspark / tests.py que fiz
Chamar isso logo após criar o SparkContext reduziu as linhas stderr registradas no meu teste de 2647 para 163. No entanto, a criação do próprio SparkContext registra 163, até
e não está claro para mim como ajustá-los programaticamente.
fonte
No Spark 2.0, você também pode configurá-lo dinamicamente para seu aplicativo usando setLogLevel :
No console do pyspark , uma
spark
sessão padrão já estará disponível.fonte
log4j
não é acessível.Edite seu arquivo conf / log4j.properties e altere a seguinte linha:
para
Outra abordagem seria:
Sparkup de inicialização e digite o seguinte:
Você não verá nenhum registro depois disso.
fonte
fonte
Para o PySpark, você também pode definir o nível de log em seus scripts com
sc.setLogLevel("FATAL")
. Dos documentos :fonte
Você pode usar setLogLevel
fonte
Isso pode ser devido à forma como o Spark calcula seu caminho de classe. Meu palpite é que o
log4j.properties
arquivo do Hadoop está aparecendo à frente do Spark no caminho de classe, impedindo que suas alterações entrem em vigor.Se você correr
o Spark imprimirá o caminho de classe completo usado para iniciar o shell; no meu caso, eu vejo
onde
/root/ephemeral-hdfs/conf
está no início do caminho da classe.Eu abri um problema [SPARK-2913] para corrigir isso no próximo lançamento (eu devo ter um patch em breve).
Enquanto isso, aqui estão algumas soluções alternativas:
export SPARK_SUBMIT_CLASSPATH="$FWDIR/conf"
aspark-env.sh
./root/ephemeral-hdfs/conf/log4j.properties
.fonte
Spark 1.6.2:
Spark 2.x:
(faísca sendo a SparkSession)
Alternativamente, os métodos antigos,
Renomeie
conf/log4j.properties.template
paraconf/log4j.properties
no Spark Dir.No
log4j.properties
, mudelog4j.rootCategory=INFO, console
paralog4j.rootCategory=WARN, console
Diferentes níveis de log disponíveis:
fonte
Maneira programática
Opções disponíveis
fonte
Eu usei isso com o Amazon EC2 com 1 mestre e 2 escravos e Spark 1.2.1.
fonte
Basta adicionar abaixo do parâmetro ao seu comando de envio de spark
Isso substitui o valor do sistema temporariamente apenas para esse trabalho. Verifique o nome exato da propriedade (log4jspark.root.logger aqui) no arquivo log4j.properties.
Espero que isso ajude, felicidades!
fonte
--conf spark.driver.extraJavaOptions='-Dlog4j.configuration=file:/home/foobar/log4j.properties
Este trecho de código abaixo para usuários do scala:
Opção 1 :
Abaixo do snippet, você pode adicionar no nível do arquivo
Opção 2 :
Opção 3:
fonte
O jeito que eu faço é:
no local eu corro o
spark-submit
script fazermude
INFO
para o nível de registro que você deseja e execute o seuspark-submit
fonte
cp /etc/spark/conf/log4j.properties.template .
Se você deseja continuar usando o log (facilidade de log para Python), pode tentar dividir as configurações do seu aplicativo e do Spark:
fonte