大数据开发 join 的运行原理 _ 大数据培训
基本描述
Hive 的 join 过程,即 hive 将 sql 的 join 转化为 mapreduce 来执行的过程。关键词主要有三个:执行计划、Shuffle join 和 map join。
因此回答本问题时,可以先回答 hive 是怎样执行 sql 的,再对 join 的过程进行说明。
当遇到让你结合例子来说明 join 过程的问题时,大数据培训根据总结选择性回答即可。
总结回答
1 简单解释 hive 解析 sql 到 mr
ok,首先 Hive 会根据 DQL 类 SQL 语句生成一个 MapReduce 作业。具体是通过 Driver 将 SQL 提交到编译器进行语法分析、解析和优化,最后生成一个 MapReduce 的执行计划,再根据执行计划,生成一个 MapReduce 作业。
2 概况 join 的类型
接着 hive 的 join 主要可以分为 Shuffle join 和 map join。两者的区别是:Shuffle join 是在 reduce 端完成的 join,map join 是在 map 端完成的 join。
3 shuffle join
MR 的 Shuffle join 的过程分为 map、shuffle 和 reduce:
首先是 map 过程,会由 map task 分别去读 A 表和 B 表。因为 join 要涉及两张表,因此要在 map 输出的时候进行标记。比如来自第一张表的输出 Value 就记录为 <1, X>,这里的 1 表示数据来自第一张表,key 值为 join 中 on 的关联条件;
接着是 Shuffle 过程,Shuffle 会将相同的 key 分发到相同的 reducer 中;
最后是 Reduce 过程,在 reduce 端完成真正的 join 操作。根据表的标记对 Value 数据求笛卡尔积,用第一张表的每条记录和第二张表的每条记录连接,输出就是 join 的结果。
4 map join
Hive 默认的是 map join。map join 的过程只有 map,其中 reduce 阶段在 map 中完成:
首先会把小表加载到缓存中。通过启动一个 mapReduce 的 local task,这个 task 会去读取小表的数据,然后生成一堆 hashtablefiles 文件,接着把这个文件放到 Distributed catch 分布式缓存;
接着 map task 会去读取大表数据,读取过程中直接与缓存做 join,没有 shuffle 过程。
文章来源于 Diting
评论