Apache spark 如何在流媒体应用程序中登录foreachRDD?

Apache spark 如何在流媒体应用程序中登录foreachRDD?,apache-spark,spark-streaming,yarn,Apache Spark,Spark Streaming,Yarn,我们正在使用spark streaming开发一个使用kafka消息的应用程序..在hadoop/Warn spark群集上运行..我在驱动程序和工作程序上都确认了log4j属性…但我仍然没有看到foreachRDD中的日志消息..我确实看到了“每个rdd的开始”和“每个rdd的结束” 我正在集群上使用以下命令运行应用程序 spark-submit --verbose --class DevMain --master yarn-cluster --deploy-mode cluster --co

我们正在使用spark streaming开发一个使用kafka消息的应用程序..在hadoop/Warn spark群集上运行..我在驱动程序和工作程序上都确认了log4j属性…但我仍然没有看到foreachRDD中的日志消息..我确实看到了“每个rdd的开始”和“每个rdd的结束”

我正在集群上使用以下命令运行应用程序

spark-submit --verbose --class DevMain --master yarn-cluster --deploy-mode cluster --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=log4j.p‌​roperties" --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=log4j‌​.properties" --files "hdfs://hdfs-name-node:8020/user/hadoopuser/log4j.properties‌​" hdfs://hdfs-name-node:8020/user/hadoopuser/streaming_2.10-1.‌​0.0-SNAPSHOT.jar hdfs://hdfs-name-node:8020/user/hadoopuser/enriched.properti‌​es
我是spark的新手,有人能帮我解释一下为什么我看不到foreachrdd中的日志消息吗?这是log4j.properties

log4j.rootLogger=WARN, rolling

log4j.appender.rolling=org.apache.log4j.RollingFileAppender
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
log4j.appender.rolling.layout.conversionPattern=[%p] %d %c %M - %m%n
log4j.appender.rolling.maxFileSize=100MB
log4j.appender.rolling.maxBackupIndex=10
log4j.appender.rolling.file=${spark.yarn.app.container.log.dir}/titanium-spark-enriched.log
#log4j.appender.rolling.encoding=URF-8

log4j.logger.org.apache,spark=WARN
log4j.logger.org.eclipse.jetty=WARN

log4j.logger.com.x1.projectname=INFO

#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.spark-project.jetty=WARN
#log4j.logger.org.spark-project.jetty.util.component.AbstractLifeCycle=ERROR
#log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
#log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO

# SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support
log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL
log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR

#log4j.appender.RollingAppender=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.RollingAppender.File=./logs/spark/enriched.log
#log4j.appender.RollingAppender.DatePattern='.'yyyy-MM-dd
#log4j.appender.RollingAppender.layout=org.apache.log4j.PatternLayout
#log4j.appender.RollingAppender.layout.ConversionPattern=[%p] %d %c %M - %m%n


#log4j.rootLogger=INFO, RollingAppender, console

Spark Streaming应用程序的问题似乎是在构建流计算后缺少
开始
,即

ssc.start()
引述:

创建和转换数据流后,可以分别使用
context.start()
context.stop()
启动和停止流计算

context.awaitTermination()
允许当前线程通过
stop()
或异常来等待上下文的终止


部署模式为群集,因此驱动程序日志将位于其中一个群集节点上。你检查过节点的日志了吗?我正在使用纱线来聚合日志我没有看到ForEachRDDH中的日志消息你是如何创建myConsumer的?那么DStream呢?显示您稍后要查看的代码。感谢您的回答Jacek…但是我有ssc.start,没有它我将无法获取日志消息,因为我已经获取了…。因此,我现在可以想出为什么您无法获取带星号的日志的唯一原因是保护条件
(rdd!=null)&&(rdd.count()>0)&(!rdd.isEmpty()
为什么会有它?这是为了确保我不会得到null或空rdd…因为…有时我们在流媒体时会得到空批次。如果我的假设不正确,请纠正我
ssc.start()