强制hiveserver2运行mapreduce作业

2ul0zpep  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(402)

我正在使用hive-1.1.0。通过只读且不包含 predicate 的beeline向hiveserver2提交查询将导致hiveserver2尝试从hdfs本身读取数据,而不生成mapreduce作业:

SELECT * FROM my_table LIMIT 100;

对于非常大的数据集,这可能会导致hiveserver2占用大量内存,从而导致长时间的垃圾收集暂停。添加一个“假” predicate 将导致hiveserver2根据需要运行mapreduce作业;例如

SELECT * FROM my_table WHERE (my_id > 0 OR my_id <= 0) LIMIT 100;

所谓“假”,我指的是一个无关紧要的 predicate ;上面的示例 predicate 将始终为true。是否有强制hiveserver2始终运行mapreduce作业而不必添加虚假 predicate 的设置?
我不是说hiveserver2何时确定它可以在本地运行mapreduce作业;我完全丧失了这种能力:

> SET hive.exec.mode.local.auto;
+----------------------------------+--+
|               set                |
+----------------------------------+--+
| hive.exec.mode.local.auto=false  |
+----------------------------------+--+

但是没有 predicate 的查询仍然完全由hiveserver2读取,从而导致问题。
非常感谢您的指导。谢谢!

x0fgdtte

x0fgdtte1#

一些select查询可以转换为单个fetch任务,而无需map reduce。
此行为由控制 hive.fetch.task.conversion 配置参数。可能的值为: none , minimal 以及 more .
如果要禁用获取任务转换,请将其设置为“无”:

set hive.fetch.task.conversion=none;
``` `minimal` 将触发的仅获取任务
select*,按分区列筛选(where和having子句),仅限。 `more` 将触发的仅获取任务
选择任何类型的表达式,包括udf、filter、limit only(包括tablesample、virtual columns)
同时阅读 `hive.fetch.task.conversion.threshold` 参数和更多详细信息:配置单元配置属性

相关问题