Hive 中的 JOIN 触发 MapReduce 中的哪种类型的 JOIN?

Posted

技术标签:

【中文标题】Hive 中的 JOIN 触发 MapReduce 中的哪种类型的 JOIN?【英文标题】:JOIN in Hive triggers which type of JOIN in MapReduce? 【发布时间】:2017-03-23 08:07:21 【问题描述】:

如果我在 hive 中有一个使用 JOIN 的查询,让我们在两个表 ON 任何列上说一个 LEFT OUTER JOIN 或一个 INNER JOIN,那么我怎么知道它被转换成哪种类型的 JOIN在后端MapReduce(即 Map-side JOIN 或 Reduce-side JOIN)?

谢谢。

【问题讨论】:

【参考方案1】:

使用explain select ... 并检查计划。它解释了 map 和 reduce 究竟会做什么。此外,在执行期间,您可以检查作业跟踪器上的日志并查看映射器或减速器进程正在做什么。

例如下面的解释计划说它是map-side join(注意计划中的Map Join Operator):

 Stage: Stage-33
    Map Reduce
      Map Operator Tree:
          TableScan
            **alias: s**
            filterExpr: (col is not null) (type: boolean)
            Statistics: Num rows: 85 Data size: 78965 Basic stats: COMPLETE Column stats: NONE
            Filter Operator
              predicate: (col is not null) (type: boolean)
              Statistics: Num rows: 22 Data size: 20438 Basic stats: COMPLETE Column stats: NONE
              **Map Join Operator
                condition map:
                     Inner Join 0 to 1**

【讨论】:

以上是关于Hive 中的 JOIN 触发 MapReduce 中的哪种类型的 JOIN?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Hive 不支持 non-equi join?

Hive常用算子实现原理简述--MapReduce版

Hive Join 优化之 Map Join

数据仓库Hive

MapReduce实现两表的Join--原理及python和java代码实现

Hive性能优化之计算Job执行优化