蜂巢上的火花 - 为啥不“选择*”产生火花应用程序/执行程序?

Posted

技术标签:

【中文标题】蜂巢上的火花 - 为啥不“选择*”产生火花应用程序/执行程序?【英文标题】:hive on spark - why doesn't 'select *' spawn spark app/executors?蜂巢上的火花 - 为什么不“选择*”产生火花应用程序/执行程序? 【发布时间】:2019-03-29 13:12:12 【问题描述】:

我已经在 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'

【问题讨论】:

【参考方案1】:

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

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

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

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

很好看。

【讨论】:

以上是关于蜂巢上的火花 - 为啥不“选择*”产生火花应用程序/执行程序?的主要内容,如果未能解决你的问题,请参考以下文章

亚马逊EMR火花上的蜂巢

在火花中加入两个存在于蜂巢中的表

在火花中联合后再次排序的蜂巢表排序

从具有时间戳的镶木地板蜂巢表中读取火花

为啥在火花中运行时配置单元查询不起作用

蜂巢时间戳不接受 Spark 时间戳类型