Todos 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:
import org.apache.log4j.{Level, Logger}
val rootLogger = Logger.getRootLogger()
rootLogger.setLevel(Level.ERROR)
Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
Logger.getLogger("org.spark-project").setLevel(Level.WARN)
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!
Adicionar -Dlog4j.configuration=<location of configuration file>
a
spark.driver.extraJavaOptions
(para o driver) ou
spark.executor.extraJavaOptions
(para executores) .
Observe que, se estiver usando um arquivo, o file:
protocolo deve ser fornecido explicitamente, e o arquivo precisa existir localmente em todos os nós .
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:
faça o upload de um costume log4j.properties
usando o envio por spark, adicionando-o ao--files
lista de arquivos a serem carregados com o aplicativo.
Fonte: documentos do Spark, Depuração
Passos:
Exemplo log4j.properties
:
# Blacklist all to warn level
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
# Whitelist our app to info :)
log4j.logger.com.github.atais=INFO
Executando spark-submit
, para modo de cluster:
spark-submit \
--master yarn \
--deploy-mode cluster \
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--files "/absolute/path/to/your/log4j.properties" \
--class com.github.atais.Main \
"SparkApp.jar"
Observe que você deve usar --driver-java-options
se estiver usando o client
modo. Documentos do Spark, ambiente de tempo de execução
Executando spark-submit
, para o modo cliente:
spark-submit \
--master yarn \
--deploy-mode client \
--driver-java-options "-Dlog4j.configuration=file:/absolute/path/to/your/log4j.properties \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--files "/absolute/path/to/your/log4j.properties" \
--class com.github.atais.Main \
"SparkApp.jar"
Notas:
- Os arquivos enviados para
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
.
- Os arquivos listados em
--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 .
atualize o $SPARK_CONF_DIR/log4j.properties
arquivo e ele será automaticamente carregado junto com as outras configurações.
Origem: documentos do Spark, Depuração
Para encontrar o seu, SPARK_CONF_DIR
você pode usar spark-shell
:
atais@cluster:~$ spark-shell
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.1.1
/_/
scala> System.getenv("SPARK_CONF_DIR")
res0: String = /var/lib/spark/latest/conf
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 durante spark-submit
.
Para especificar um diretório de configuração diferente do padrão “SPARK_HOME/conf”
, você pode definir SPARK_CONF_DIR
. Faísca vai usar os arquivos de configuração ( spark-defaults.conf
, spark-env.sh
,log4j.properties
, etc ) a partir deste diretório.
Fonte: Spark docs, Configuração
Passos:
- Copiar cluster
conf
pasta (mais informações, método nº 3)
- Editar
log4j.properties
nessa pasta (exemplo no método nº 2)
Defina SPARK_CONF_DIR
para esta pasta, antes de executar spark-submit
,
exemplo:
export SPARK_CONF_DIR=/absolute/path/to/custom/conf
spark-submit \
--master yarn \
--deploy-mode cluster \
--class com.github.atais.Main \
"SparkApp.jar"
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!