能否运行无日志生成的Spark/MapReduce/Hive on Tez作业?
无日志运行Hadoop/Spark/MapReduce/Hive on Tez作业的实现方法
Spark作业
要实现提交后无日志留存、Resource Manager(RM)和Spark History Server无相关信息,需从三个层面关闭日志与记录:
- 关闭Spark事件日志:提交作业时添加
--conf spark.eventLog.enabled=false,阻止Spark向History Server推送任何运行数据。 - 彻底禁用日志输出:
- 新建
log4j.properties文件,内容如下:rootLogger=OFF log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c{1}: %m%n - 提交作业时指定该配置文件,覆盖Driver和Executor的日志级别:
spark-submit \ --conf spark.eventLog.enabled=false \ --conf spark.yarn.log-aggregation-enable=false \ --files log4j.properties \ --conf spark.driver.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties \ --conf spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties \ your-spark-job.jar
- 新建
- 减少YARN元数据留存:添加
--conf spark.yarn.submit.waitAppCompletion=false(无需等待作业完成时使用),若集群未强制开启日志聚合,作业级参数可直接禁用该功能。
MapReduce作业
通过作业级参数关闭日志聚合、输出与历史记录:
- 提交作业时添加以下参数,全面禁用日志相关功能:
hadoop jar your-mapreduce-job.jar \ -Dmapreduce.job.log-aggregation.enable=false \ -Dmapreduce.map.log.level=OFF \ -Dmapreduce.reduce.log.level=OFF \ -Dmapreduce.jobhistory.enabled=false - 若需让RM自动清理应用记录,需管理员修改集群级配置
yarn.resourcemanager.application-store.max-keep-ms=0,作业级无法直接修改此设置。
Hive on Tez作业
需同时关闭Hive、Tez与YARN的日志及历史记录:
- 通过
hive命令提交作业时,添加如下-hiveconf参数:hive \ -hiveconf hive.execution.engine=tez \ -hiveconf tez.task.log.level=OFF \ -hiveconf hive.log.level=OFF \ -hiveconf mapreduce.job.log-aggregation.enable=false \ -hiveconf tez.history.logging.enabled=false \ -hiveconf hive.server2.logging.operation.enabled=false \ -e "你的Hive SQL语句" - 若使用Hive CLI交互模式,可先执行上述参数对应的
set命令,再运行SQL。
注意:如果集群管理员强制开启了日志聚合或历史记录功能,作业级参数可能无法覆盖,需联系管理员调整集群配置。
内容的提问来源于stack exchange,提问作者ash_ketchum12
相关产品推荐
相关产品推荐

