在大数据开发中,会有使用命令“hive - e sql”将对应的查询结果赋值给变量的情况,如果使用hive3.x版本执行 “hive -e sql”命令将结果赋值给变量时,由于“hive -e”会有WARN信息输出,会把所有信息都赋值给了变量。如,执行如下命令:
#执行如下hive查询
[root@node3 ~]# tag=`hive -e "set hive.exec.mode.local.auto=true;SELECT COUNT(*) FROM test" `
#打印tag结果
[root@node3 ~]# echo $tag
1
WARN: The method class org.apache.commons.logging.impl.SLF4JLogFactory#release() was invoked.
WARN: Please see http://www.slf4j.org/codes.html#release for an explanation.
以上WARN警告信息单独配置Hive日志并不能去除,可能由于由日志文件,系统日志,或者其他日志记录机制打印输出。可以通过grep 命令来去除WARN 信息的日志,按照如下步骤解决。
1. 配置hive log4j.properties
在hive客户端目录$HIVE_HOME/conf/中创建log4j.properties,内容如下,配置这个的目的是保证结果中没有hive相关日志输出。
log4j.rootLogger=ERROR,CA
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
2.脚本或者命令中通过grep将WARN日志过滤
[root@node3 ~]# tag=`hive -e "set hive.exec.mode.local.auto=true;SELECT COUNT(*) FROM test" 1 | grep -v "WARN:"`
这样再次打印tag就会发现WARN日志被去除:
[root@node3 ~]# echo $tag
1