Hive3.1.2 启动时打印大量日志问题解决 一、问题描述在使用Hive 3.1.x版本时启动 Hive Shell 后会发现控制台中夹杂了大量的INFO级别日志信息。这些日志严重干扰了查询结果的正常显示如下图所示可以看到即使执行一条简单的 hive 启动命令输出结果也会被大量的日志信息淹没包括conf.HiveConf配置加载日志ql.Driver查询编译与执行日志exec.ListSinkOperator算子初始化日志Configuration.deprecation配置弃用警告lzo.GPLNativeCodeLoader库加载日志对于需要频繁使用 Hive Shell 进行数据查询和调试的开发者来说这种日志输出不仅影响了阅读体验还可能导致关键信息被淹没。二、问题原因分析Hive 3.1.x 版本的日志配置默认将日志级别设为INFO并且日志直接输出到控制台Console。由于 Hive 底层依赖 Hadoop、Tez/MapReduce 等组件启动时会加载大量配置和初始化各类服务因此会产生海量的日志输出。值得注意的是直接修改 Hive 安装目录conf/下已有的日志配置文件如hive-log4j2.properties或hive-exec-log4j2.properties往往不会生效。这是因为 Hive 3.1.x 在启动时会优先加载内置的默认日志配置而非用户自定义的配置文件。三、解决方案方法一创建自定义 log4j.properties 文件推荐在 Hive 安装目录的conf/文件夹下新建一个log4j.properties文件通过自定义配置覆盖默认的日志行为。操作步骤1. 进入 Hive 配置目录cd$HIVE_HOME/conf2. 创建 log4j.properties 文件vimlog4j.properties3. 添加以下配置内容以将日志级别调整为WARN为例只显示警告及以上级别的日志log4j.rootLoggerERROR, CA log4j.appender.CAorg.apache.log4j.ConsoleAppender log4j.appender.CA.layoutorg.apache.log4j.PatternLayout log4j.appender.CA.layout.ConversionPattern%-4r [%t] %-5p %c %x - %m%n4. 保存并退出重新启动 Hivehive配置效果配置完成后再次启动然后执行show databases;控制台将只显示查询结果不再有大量INFO日志干扰方法二通过命令行参数调整日志级别如果不想修改配置文件也可以在启动 Hive 时通过 JVM 参数指定日志级别hive-hiveconfhive.root.loggerWARN,console或者在hive-site.xml中添加propertynamehive.root.logger/namevalueWARN,console/value/property方法三使用 log4j2 配置Hive 3.x 新版本Hive 3.1.x 底层使用的是Log4j2因此也可以创建log4j2.properties文件进行配置cd$HIVE_HOME/confvimlog4j2.properties添加以下内容rootLogger.level WARN rootLogger.appenderRefs console rootLogger.appenderRef.console.ref Console appender.console.type Console appender.console.name Console appender.console.layout.type PatternLayout appender.console.layout.pattern %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n四、日志级别说明级别说明适用场景ERROR错误信息仅显示严重错误WARN警告信息推荐日常使用过滤大部分无关日志INFO一般信息默认级别日志量较大DEBUG调试信息排查问题时临时使用TRACE详细跟踪极少使用日志量极大建议日常开发使用WARN级别排查复杂问题时临时调整为INFO或DEBUG。