如何抑制蜂巢警告

Posted

技术标签:

【中文标题】如何抑制蜂巢警告【英文标题】:How to supress hive warning 【发布时间】:2019-03-14 06:14:39 【问题描述】:

我是 Hive 的新手。尝试执行一个查询,将数据输出到一个文件。

以下是我的查询:

hive -e "SET hive.auto.convert.join=false;set hive.server2.logging.operation.level=NONE;SET mapreduce.map.memory.mb = 16384; SET mapreduce.map.java.opts='-Djava.net.preferIPv4Stack=true -Xmx13107M';SET mapreduce.reduce.memory.mb = 13107; SET mapreduce.reduce.java.opts='-Djava.net.preferIPv4Stack=true -Xmx16384M';设置 hive.support.concurrency = false; SET hive.exec.dynamic.partition=true;SET hive.exec.dynamic.partition.mode=nonstrict;放 hive.exec.max.dynamic.partitions.pernode=10000;SET hive.exec.max.dynamic.partitions=100000;放 hive.exec.max.created.files=1000000;SET mapreduce.input.fileinputformat.split.maxsize=128000000;放 hive.hadoop.supports.splittable.combineinputformat=true;设置 hive.execution.engine=先生;设置 hive.enforce.bucketing = true;hive 查询 在这里;" > /tmp/分析

但在 /tmp/analysis 文件中,我可以看到以下警告。

警告:调用了方法类 org.apache.commons.logging.impl.SLF4JLogFactory#release()。 警告:请参阅http://www.slf4j.org/codes.html#release 以获得解释。

我怎样才能抑制它?

【问题讨论】:

【参考方案1】:

来自 Hive 文档https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Cli

日志记录:

Hive 使用 log4j 进行日志记录。默认情况下,CLI 不会将日志发送到控制台。 对于 0.13.0 之前的 Hive 版本,默认日志记录级别为 WARN。从 Hive 0.13.0 开始,默认的日志记录级别是 INFO。 默认情况下,Hive 将使用 Hive 安装的 conf/ 目录中的 hive-log4j.default,该目录将日志写入 /tmp/<userid>/hive.log 并使用 WARN级别。

出于调试目的,通常需要将日志发送到标准输出和/或更改日志记录级别。这些可以从命令行完成,如下所示:

 $HIVE_HOME/bin/hive --hiveconf hive.root.logger=INFO,console

hive.root.logger 指定日志记录级别以及日志目标。将控制台指定为目标将日志发送到标准错误(而不是日志文件)。

如果用户愿意,可以通过添加如下所示的参数将日志发送到控制台:

bin/hive --hiveconf hive.root.logger=INFO,console  //for HiveCLI (deprecated)
bin/hiveserver2 --hiveconf hive.root.logger=INFO,console

或者,用户只能通过以下方式更改日志记录级别:

bin/hive --hiveconf hive.root.logger=INFO,DRFA //for HiveCLI (deprecated)
bin/hiveserver2 --hiveconf hive.root.logger=INFO,DRFA

另一个日志记录选项是 TimeBasedRollingPolicy(适用于 Hive 1.1.0 及更高版本,HIVE-9001),提供如下所示的 DAILY 选项:

bin/hive --hiveconf hive.root.logger=INFO,DAILY //for HiveCLI (deprecated)
bin/hiveserver2 --hiveconf hive.root.logger=INFO,DAILY

希望对你有帮助!

【讨论】:

【参考方案2】:

使用不会在输出中打印任何日志的 hive 静默模式

hive -S -e "SET hive.auto.convert.join=false;set hive.server2.logging.operation.level=NONE;SET mapreduce.map.memory.mb = 16384; SET mapreduce.map.java.opts='-Djava.net.preferIPv4Stack=true -Xmx13107M';SET mapreduce.reduce.memory.mb = 13107; SET mapreduce.reduce.java.opts='-Djava.net.preferIPv4Stack=true -Xmx16384M';set hive.support.concurrency = false; SET hive.exec.dynamic.partition=true;SET hive.exec.dynamic.partition.mode=nonstrict; SET hive.exec.max.dynamic.partitions.pernode=10000;SET hive.exec.max.dynamic.partitions=100000; SET hive.exec.max.created.files=1000000;SET mapreduce.input.fileinputformat.split.maxsize=128000000; SET hive.hadoop.supports.splittable.combineinputformat=true;set hive.execution.engine=mr; set hive.enforce.bucketing = true;hive query over here;" > /tmp/analysis

【讨论】:

以上是关于如何抑制蜂巢警告的主要内容,如果未能解决你的问题,请参考以下文章

如何抑制 LLVM 自动合成警告?

如何在 Kotlin 中抑制检查式警告

如何抑制龙目岛警告

如何抑制更新链接警告?

如何使用 Intellij SonarLint 插件抑制特定方法的警告

如何抑制源自宏的 Clippy 警告?