首页 > 解决方案 > 蜂巢上的火花 - 为什么不“选择*”产生火花应用程序/执行程序?

问题描述

我在 Spark(执行引擎)上设置了 Hive(v2.3.4)。

这将启动一个 spark 应用程序/执行程序:

select count(*) from s.t where h_code = 'KGD78' and h_no = '265'

为什么这不启动 spark 应用程序/执行程序:

select * from s.t where h_code = 'KGD78' and h_no = '265'

标签: apache-sparkhadoophivemapreducehiveql

解决方案


这 - 第二种情况 - 是由于不太知名的“hive.fetch.task.conversion”参数。

根据设置方式,Hive 可以启动单个“获取任务”而不是 Map Reduce 作业,即使使用过滤器即 where 子句。

如果您选择 * 或非分区列,它将启动 fetch 任务而不是 MR 作业 - 单线程。单线程并不总是一件好事。count(*) 应该不言自明,您可能需要进行大量处理,第二种情况可以看作是光标。

您可以在 hive-site.xml 中将参数更改为“minimal”或“none”来避免这种类型的处理。

好眼力。


推荐阅读