本帖最后由 冰诺莫语 于 2016-8-17 10:41 编辑
Spark新手,工作中用到spark streaming,使用流计算对kafka中topic数据进行获取并治理,过程中遇到一些小问题,希望大侠帮忙解答,多谢各位!
环境:
Spark 1.5.1
Centos6.5
Hadoop 2.6.4
问题:
1spark streaming 应用程序中,如何进行日志输出?会输出到哪里?
现在我是这样尝试的,使用log4j来进行日志输出,自己新建了一个log4j.properties,将spark中的log4j配置也复制过来,然后添加自己的日志记录器,并将log4j.properties放在linux文件系统上,log4j.properties配置如下:[mw_shl_code=text,true]#############################################################################
#stan log output
spark.stan.log.dir=/home/data/logs/stan.log
log4j.logger.stan=INFO,file,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=%p %d{yy/MM/dd HH:mm:ss} %c{1}: %m%n
# info log file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.Encoding=UTF8
log4j.appender.file.File=${spark.stan.log.dir}
log4j.appender.file.DatePattern='_'yyyyMMdd'.log'
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p] [%d{yy/MM/dd HH:mm:ss}] [%c{1}]: %m%n
########################################################################################[/mw_shl_code]然后在程序中通过:[mw_shl_code=scala,true]PropertyConfigurator.configure("log4j.properties")[/mw_shl_code]在代码中设置使用此配置文件,然后通过如下代码获取Logger对象[mw_shl_code=scala,true]logger: Logger = LogManager.getLogger("stan")[/mw_shl_code],然后打包运行。
程序运行没有问题,在console和log文件中可以看到spark main方法开始的log输出,但是后续spark mapPartitions中的日志输出打印不出来,日志输出都是使用INFO级别。这是为什么?
2.在1的基础上有了几个疑问,
①spark task是分布式运行在集群的各个机器上,那么对log4j的配置是否不能在其余机器生效?
②使用mapPartitions进行操作,这个mapPartitions多久返回一次?是StreamingContext的batchDuration参数设置的时间数据执行后返回吗?
③日志输出,是会输出到集群中运行task的节点上对应目录吗?
请大家帮忙解答,谢谢!
|