1.hadoop项目日志输出级别

首先了解log4j的基本知识,参考之前的博客。

对于hadoop来说,日志很繁杂。对于输出日志的级别,首先查看hadoop的日志文件log4j.properties

CDH设置spark任务日志级别 spark日志在哪里_spark日志存储路径为mysql

log4j.rootLogger=${hadoop.root.logger}, EventCounter的前一部分是hadoop.root.logger。所以我们可以知道,对已我们修改hadoop的配置文件,默认应该是修改hadoop.root.logger的值,EventCounter应该是默认hadoop会添加在后面。类似的道理,我们修改任何的日志配置,都应该不会影响到系统本身的日志输出,因为它都会在log4j.rootLogger后面添加系统本身需要实现的日志实现。唯一影响的就是日志的输出级别了。包括我们打包的mapreduce、spark项目都是这个道理,都不会影响到系统本身的日志输出,除了日志输出级别。所以我们的log4j.rootLogger配置应该很简单,就是配置一下日志的输出级别和你自己需要实现的日志输出,如果都用默认的,则项目中log4j.rootLogger可以直接是空的。对于spark来说,他本身是不会输出到console的,所以需要在加上log4j.rootCategory=DEBUG, console,并且在日志文件中加上console的相关配置,这样console才会输出所有的日志,默认是没有console的。对于日志的输出级别判断,使用log.isDebugEnabled()即可。

2.日志类别关系

hadoop日志有很多,大概分为服务日志和作业日志。服务日志就是hadoop各个基础服务的日志,如hdfs,resourcemanager,nodemanager,yarn等服务产生的日志;作业日志就是在yarn上运行的任务产生的日志,有jobhistory日志和Container日志,jobhistory日志就是应用程序运行的日志,如开始时间结束时间等,container就是真正的代码产生的日志。我们部署的Map reduce jobhistory 服务,查看的日志就是jobhistory的日志,一般会有链接到container上。对于在yarn上运行的spark任务,spark的job history没有链接指向container的日志。map reduce job history只会收集mapReduce任务的日志,需要启动spark的job history,才能看到spark的任务日志。

CDH设置spark任务日志级别 spark日志在哪里_日志输出_02

对于上图的spark类型的任务,只有成功的History链接才会指向spark 的history server,kill掉的是不会指向spark的history server的。而且从这里点进去的spark类型任务,只会显示application master节点的信息,不会显示其他节点的container的信息。mapreduce任务则会显示所有节点的信息。

3.hadoop日志存放路径详解

4.动态设置hadoop日志级别