У нас есть приложение со структурированной потоковой передачей искр (работающее на 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()
}
}
Может ли кто-нибудь помочь, как собрать пользовательские журналы приложений потоковой передачи со структурой искры,
Заранее спасибо.