2016-10-18 3 views
2

Я пытаюсь войти вывод искры потоковый, как показано в коде нижеНевозможно войти в Спарк Потоковое

dStream.foreachRDD { rdd => 

    if (rdd.count() > 0) { 
    @transient lazy val log = Logger.getLogger(getClass.getName) 
    log.info("Process Starting") 

     rdd.foreach { item => 

    log.info("Output :: "+item._1 + "," + item._2 + "," + System.currentTimeMillis()) 
    } 
} 

код выполняется на кластере пряжей, используя следующую команду

./bin/spark-submit --class "StreamingApp" --files file:/home/user/log4j.properties --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:/home/user/log4j.properties" --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:/home/user/log4j.properties" --master yarn --deploy-mode cluster --driver-memory 4g --executor-memory 2g --executor-cores 1 /home/user/Abc.jar 

Когда я просматриваю журналы из кластера пряжи, я могу найти журналы, написанные до foreach, т.е. log.info("Process Starting"), но журналы внутри foreach не печатаются.

Я также попытался создать отдельную сериализуемую класс, как показано ниже

object LoggerObj extends Serializable{ 

     @transient lazy val log = Logger.getLogger(getClass.getName) 
    } 

и используя тот же внутреннего Еогеасп следующего

dStream.foreachRDD { rdd => 

    if (rdd.count() > 0) { 

    LoggerObj.log.info("Process Starting") 

     rdd.foreach { item => 

    LoggerObj.log.info("Output :: "+item._1 + "," + item._2 + "," + System.currentTimeMillis()) 
    } 
} 

, но все тот же вопрос, только журналы вне Еогеаспа являются печатается.

В log4j.properties приводится ниже

log4j.rootLogger=INFO,stdout,FILE 
log4j.rootCategory=INFO,FILE 
log4j.appender.file=org.apache.log4j.FileAppender 
log4j.appender.FILE=org.apache.log4j.RollingFileAppender 
log4j.appender.FILE.File=/tmp/Rt.log 
log4j.appender.FILE.ImmediateFlush=true 
log4j.appender.FILE.Threshold=debug 
log4j.appender.FILE.Append=true 
log4j.appender.FILE.MaxFileSize=500MB 
log4j.appender.FILE.MaxBackupIndex=10 
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.FILE.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n 
log4j.logger.Holder=INFO,FILE 
+0

Вам нужно посмотреть в своих * рабочих узлах *, вы найдете '/ tmp/Rt.log' в каждом из них. –

+0

Foreach - это действие. Когда ваш конвейер работает, найдите ссылку драйвера stdout/stderr на вкладке «исполнители» в Spark UI, где id исполнителя является «драйвером». Проверьте там журналы и дайте мне знать, можете ли вы там найти. –

+0

@RakeshRakshit Я могу найти журналы, написанные до foreach, то есть log.info («Процесс запуска»), а не журналы внутри foreach. –

ответ

0

я был в состоянии исправить это, поместив файл «log4j.properties» под каждым работником узлов.

Смежные вопросы