Как выполнить настраиваемое ведение журнала с помощью внешнего файла log4j.properties для приложения структурированной потоковой передачи Spark - PullRequest
0 голосов
/ 29 мая 2020

У нас есть приложение со структурированной потоковой передачей искр (работающее на AWS EMR) и отправка с помощью программы запуска искры, и я хотел бы собирать пользовательские журналы приложений структурированной потоковой передачи искр. Для этого я отправляю файл log4j.properties извне. Для внешнего файла log4j я выполнил следующие пункты:

https://www.youtube.com/watch?v=oMEoa8c51ls и http://shzhangji.com/blog/2015/05/31/spark-streaming-logging-configuration/

Но я не могу увидеть эти журналы в Веб-интерфейс YARN.

Ниже мой файл log4j-driver.properties.

log4j.rootLogger=INFO,rolling
log4j.appender.rolling=org.apache.logg4j.RollingFileAppender
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
log4j.appender.rolling.layout.ConversionPattern=[%d] %p %m (%c)%n
log4j.appender.rolling.maxFileSize=50MB
log4j.appender.rolling.maxBackupIndex=10
log4j.appender.rolling.file=${spark.yarn.app.container.log.dir}/${app.logging.name}-driver.log
log4j.appender.rolling.encoding=UTF-8
log4j.logger.org.apache.spark=${app.logging.level}
log4j.logger.org.eclipse.jetty=WARN

Ниже приведен фрагмент кода для отправки приложения структурированной потоковой передачи Spark.

class LetsLaunchSparkForStreaming {
  val logger:Logger = Logger.getLogger(this.getClass)

  def letsLaunchSpark(ag1:String,arg2:String,arg3:String,arg4:String): Unit = {
    logger.info("topicName" + arg1)
    val countDownLatch = new CountDownLatch(1)
    val log4jDriverProperties:String = "-Dapp.logging.level=DEBUG -Dlog4j.configuration=file:/location/to/log4j-driver.properties -Dapp.logging.name="+arg1
    val log4jExecutorProperties:String = "-Dapp.logging.level=DEBUG -Dlog4j.configuration=file:/location/to/log4j-executor.properties -Dapp.logging.name="+arg1
    val env = Map("HADOOP_CONF_DIR" -> "/hadoop/home/path")
    val sparkLauncher = new SparkLauncher(env.asJava)
      .setVerbose(true)
      .setAppName("Application Name"+"_Streaming._Query")
      .setSparkHome("/Spark/Home")
      .setAppResource(/spark/streaming.application.jar)
      .setMainClass("main.Class")
      .setMaster("yarn")
      .setDeployMode("cluster")
      .setConf("spark.dynamicAllocation.enabled","true")
      .setConf("spark.dynamicAllocation.minExecutors","2")
      .setConf("spark.dynamicAllocation.initialExecutors","4")
      .setConf("spark.dynamicAllocation.maxExecutors","75")
      .setConf("spark.yarn.driver.memoryOverhead","2048")
      .setConf("spark.yarn.executor.memoryOverhead","9246")
      .setConf("spark.driver.extraJavaOptions",log4jDriverProperties)
      .setConf("spark.executor.extraJavaOptions",log4jExecutorProperties)
     // .addFile("/full/path/to/log4j-driver.properties")
      .addSparkArg("--driver-memory",driver_memory)
      .addSparkArg("--driver-cores",driver_cores)
      .addSparkArg("--executor-memory",executor_memory)
      .addSparkArg("--executor-cores",executor_cores)
      .addSparkArg("--num-executors",num_executors)
      .addSparkArg("--queue",spark_queue)
      .addAppArgs(arg2,arg3,arg4)
      .startApplication()
}
}

Может ли кто-нибудь помочь, как собрать пользовательские журналы приложений потоковой передачи со структурой искры,

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...