美文网首页
Hadoop实现join的几种方法【大数据开发面试】

Hadoop实现join的几种方法【大数据开发面试】

作者: LiJiaSi | 来源:发表于2021-04-30 10:43 被阅读0次

    今天分享一下大数据开发的热点问题

    问题分析

    本题主要是考察学员对mapreduce的熟悉程度

    核心答案讲解

    (1)reduce side join

    reduce side join是一种最简单的join方式,其主要思想如下:

    在map阶段,map函数同时读取两个文件File1和File2,为了区分两种来源的key/value数据对,对每条数据打一个标签 (tag),比如:tag=0表示来自文件File1,tag=2表示来自文件File2。即:map阶段的主要任务是对不同文件中的数据打标签。

    在reduce阶段,reduce函数获取key相同的来自File1和File2文件的value list, 然后对于同一个key,对File1和File2中的数据进行join(笛卡尔乘积)。即:reduce阶段进行实际的连接操作。

    (2)map side join

    之所以存在reduce side join,是因为在map阶段不能获取所有需要的join字段,即:同一个key对应的字段可能位于不同map中。Reduce side join是非常低效的,因为shuffle阶段要进行大量的数据传输。

    Map side join是针对以下场景进行的优化:两个待连接表中,有一个表非常大,而另一个表非常小,以至于小表可以直接存放到内存中。这样,我们可以将小表复制多 份,让每个map task内存中存在一份(比如存放到hash table中),然后只扫描大表:对于大表中的每一条记录key/value,在hash table中查找是否有相同的key的记录,如果有,则连接后输出即可。

    (3)SemiJoin

    SemiJoin,也叫半连接,是从分布式数据库中借鉴过来的方法。它的产生动机是:对于reduce side join,跨机器的数据传输量非常大,这成了join操作的一个瓶颈,如果能够在map端过滤掉不会参加join操作的数据,则可以大大节省网络IO。

    实现方法很简单:选取一个小表,假设是File1,将其参与join的key抽取出来,保存到文件File3中,File3文件一般很小,可以放到 内存中。在map阶段,使用DistributedCache将File3复制到各个TaskTracker上,然后将File2中不在File3中的 key对应的记录过滤掉,剩下的reduce阶段的工作与reduce side join相同。

    问题扩展

    map的join是将一个数据集的数据放入Map集合中,将集合在setup放入到缓存中,所以涉及DistributedCache,因为涉及在内存,所以放入缓存的数据集样本要小,否则不适用,所以这个业务场景比较少。

    reduce的join将需要join的数据集都作为map的输入,在map的逻辑中对数据进行标记,reduce中对数据进行合并,需要自定义数据类型。分享一些相关的Hadoop教程

    Hadoop的大数据

    Hadoop集成Kerberos安全技术

    相关文章

      网友评论

          本文标题:Hadoop实现join的几种方法【大数据开发面试】

          本文链接:https://www.haomeiwen.com/subject/flcnrltx.html