Gostaria de interromper várias mensagens que estão chegando no shell de faísca.
Tentei editar o log4j.properties
arquivo para interromper essas mensagens.
Aqui estão os conteúdos de 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
Mas as mensagens ainda estão sendo exibidas no console.
Aqui estão algumas mensagens de exemplo
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
Como eu paro isso?
apache-spark
log4j
spark-submit
Vishwas
fonte
fonte
Logo após o início do
spark-shell
tipo;No Spark 2.0 (Scala):
Documentos da API: https://spark.apache.org/docs/2.2.0/api/scala/index.html#org.apache.spark.sql.SparkSession
Para Java:
fonte
Obrigado, AkhlD e @Sachin Janani, por sugerirem alterações no
.conf
arquivo.O código a seguir resolveu meu problema:
1) Adicionado
import org.apache.log4j.{Level, Logger}
na seção de importação2) Adicionada a seguinte linha após a criação do objeto de contexto spark, ou seja, após
val sc = new SparkContext(conf)
:fonte
Use o comando abaixo para alterar o nível do log ao enviar o aplicativo usando spark-submit ou spark-sql:
Nota: substitua
<file path>
onde olog4j
arquivo de configuração está armazenado.Log4j.properties:
log4j.xml
Alterne para FileAppender em log4j.xml se desejar gravar registros em arquivo em vez de console.
LOG_DIR
é uma variável para o diretório de logs que você pode fornecer usandospark-submit --conf "spark.driver.extraJavaOptions=-D
.Outra coisa importante a entender aqui é que, quando o trabalho é iniciado no modo distribuído (cluster no modo de implantação e mestre como fio ou mesos), o arquivo de configuração log4j deve existir nos nós do driver e do trabalhador (
log4j.configuration=file:<file path>/log4j.xml
), caso contrário, o log4j init irá reclamar.Dica para resolver esse problema
Mantenha o arquivo de configuração log4j no sistema de arquivos distribuído (HDFS ou mesos) e inclua a configuração externa usando o log4j PropertyConfigurator . ou use sparkContext addFile para disponibilizá-lo em cada nó e use log4j PropertyConfigurator para recarregar a configuração.
fonte
org
logs tradicionalmente do criador de logs padrão.Log4j.properties
arquivo? Não parece ser usado. Você está simplesmente documentando as propriedades definidas no arquivo XML?--files
no comando spark-submit para disponibilizar o log4j.properties em todos os nós.Log4.properties
emmain/resources
caso em que não existeTodos os métodos coletados com exemplos
Introdução
Na verdade, existem muitas maneiras de fazer isso . Alguns são mais difíceis dos outros, mas cabe a você qual deles melhor lhe convém. Vou tentar mostrar todos eles.
Nº 1 programaticamente em seu aplicativo
Parece ser o mais fácil, mas você precisará recompilar seu aplicativo para alterar essas configurações. Pessoalmente, não gosto, mas funciona bem.
Exemplo:
Você pode conseguir muito mais usando a
log4j
API.Fonte: [ Log4J Configuration Docs , seção Configuration]
# 2 Passe
log4j.properties
durantespark-submit
Este é muito complicado, mas não impossível. E a minha favorita.
O Log4J durante a inicialização do aplicativo está sempre procurando e carregando o
log4j.properties
arquivo do caminho de classe.No entanto, ao usar
spark-submit
o caminho de classe do Spark Cluster, prevalece sobre o caminho de classe do aplicativo! É por isso que colocar esse arquivo no seu jar de gordura não substituirá as configurações do cluster!Para satisfazer a última condição, você pode carregar o arquivo no local disponível para os nós (como
hdfs
) ou acessá-lo localmente com o driver, se estiver usandodeploy-mode client
. De outra forma:Fonte: documentos do Spark, Depuração
Passos:
Exemplo
log4j.properties
:Executando
spark-submit
, para modo de cluster:Observe que você deve usar
--driver-java-options
se estiver usando oclient
modo. Documentos do Spark, ambiente de tempo de execuçãoExecutando
spark-submit
, para o modo cliente:Notas:
spark-cluster
com--files
estarão disponíveis no diretório raiz, portanto, não há necessidade de adicionar nenhum caminho no diretório raiz.file:log4j.properties
.--files
devem ser fornecidos com o caminho absoluto!file:
prefixo na configuração URI é obrigatório.# 3 Editar agrupamentos
conf/log4j.properties
Isso altera o arquivo de configuração de log global .
Origem: documentos do Spark, Depuração
Para encontrar o seu,
SPARK_CONF_DIR
você pode usarspark-shell
:Agora basta editar
/var/lib/spark/latest/conf/log4j.properties
(com o exemplo do método 2) e todos os seus aplicativos compartilharão essa configuração.# 4 Substituir diretório de configuração
Se você gosta da solução nº 3, mas deseja personalizá-la por aplicativo, pode copiar a
conf
pasta, editá-la e especificar como a configuração raiz durantespark-submit
.Fonte: Spark docs, Configuração
Passos:
conf
pasta (mais informações, método nº 3)log4j.properties
nessa pasta (exemplo no método nº 2)Defina
SPARK_CONF_DIR
para esta pasta, antes de executarspark-submit
,exemplo:
Conclusão
Não tenho certeza se existe algum outro método, mas espero que isso aborde o tópico de A a Z. Caso contrário, sinta-se à vontade para me enviar um ping nos comentários!
Aproveite o seu caminho!
fonte
Você define desativar os logs, definindo seu nível como OFF da seguinte maneira:
ou edite o arquivo de log e defina o nível de log como desativado, apenas alterando a seguinte propriedade:
fonte
Acabei de adicionar esta linha a todos os meus scripts pyspark na parte superior, logo abaixo das instruções de importação.
exemplo cabeçalho dos meus scripts pyspark
fonte
As respostas acima estão corretas, mas não me ajudaram exatamente, pois havia informações adicionais necessárias.
Acabei de configurar o Spark para que o arquivo log4j ainda tivesse o sufixo '.template' e não estivesse sendo lido. Eu acredito que o log padrão é o conf do log principal do Spark.
Portanto, se você é como eu e acha que as respostas acima não ajudaram, talvez você também precise remover o sufixo '.template' do seu arquivo log4j conf e, em seguida, o procedimento acima funciona perfeitamente!
http://apache-spark-user-list.1001560.n3.nabble.com/disable-log4j-for-spark-shell-td11278.html
fonte
No Python / Spark, podemos fazer:
O após a definição do Sparkcontaxt 'sc' chama essa função de: quiet_logs (sc)
fonte
tl; dr
Detalhes-
Internamente,
setLogLevel
chamaorg.apache.log4j.Level.toLevel(logLevel)
que ele usa para definir o usoorg.apache.log4j.LogManager.getRootLogger().setLevel(level)
.Você pode configurar o log padrão para o shell Spark
conf/log4j.properties
. Useconf/log4j.properties.template
como ponto de partida.Definindo níveis de log em aplicativos Spark
Nos aplicativos independentes do Spark ou na sessão do Spark Shell, use o seguinte:
Desativando o log (no log4j):
Use o seguinte
conf/log4j.properties
para desativar completamente o log:Referência: Mastering Spark de Jacek Laskowski.
fonte
Simples de fazer na linha de comando ...
spark2-submit --driver-java-options="-Droot.logger=ERROR,console"
..outras opções..fonte
spark2-submit
?Basta adicionar abaixo do parâmetro ao seu comando spark-shell OR spark-submit
Verifique o nome exato da propriedade (log4jspark.root.logger aqui) no arquivo log4j.properties. Espero que isso ajude, felicidades!
fonte
Uma idéia interessante é usar o RollingAppender conforme sugerido aqui: http://shzhangji.com/blog/2015/05/31/spark-streaming-logging-configuration/ para que você não "polua" o espaço do console, mas ainda poderá ver os resultados em $ YOUR_LOG_PATH_HERE / $ {dm.logging.name} .log.
Outro método que resolve a causa é observar que tipo de log você costuma ter (proveniente de diferentes módulos e dependências) e definir para cada granularidade para o log, ao ativar logs "silenciosos" de terceiros que são muito detalhados:
Por exemplo,
fonte
fonte
fonte
val rootLogger = Logger.getRootLogger() rootLogger.setLevel(Level.ERROR)
FuncionouAlém de todas as postagens acima, aqui está o que resolveu o problema para mim.
O Spark usa slf4j para ligar aos registradores. Se log4j não for a primeira ligação encontrada, você poderá editar os arquivos log4j.properties conforme desejar, os registradores nem sequer serão utilizados. Por exemplo, isso poderia ser uma saída possível do SLF4J:
Portanto, aqui foi utilizado o SimpleLoggerFactory, que não se importa com as configurações do log4j.
Excluindo o pacote slf4j-simple do meu projeto via
resolveu o problema, agora que a ligação do log4j logger é usada e qualquer configuração no log4j.properties é respeitada. Para sua informação, meu arquivo de propriedades log4j contém (além da configuração normal)
Espero que isto ajude!
fonte
Este funcionou para mim. Para que apenas as mensagens de ERRO sejam exibidas como
stdout
, olog4j.properties
arquivo pode se parecer com:fonte
Se você não tem a capacidade de editar o código java para inserir as
.setLogLevel()
instruções e não deseja implantar mais arquivos externos, pode usar uma maneira de força bruta para resolver isso. Apenas filtre as linhas INFO usando grep.fonte
Se mais alguém estiver preso nisso,
nada do acima funcionou para mim. Eu tive que remover
do meu build.gradle para os logs desaparecerem. TLDR: não importe nenhuma outra estrutura de log, você deve ficar bem usando
org.apache.log4j.Logger
fonte
Outra maneira de parar completamente os logs é:
Isso funcionou para mim. Um NullAppender é
fonte