Hadoop :Join 操作

Hadoop :Join 操作

一、 实验目的

  1. 基于 MapReduce 思想,编写两文件 Join 操作的程序。

二、 实验要求
2. 能够理解 MapReduce 编程思想,然后会编写 MapReduce 版本 Join 程序,并能执
行该程序和分析执行过程。
三、 实验背景
3. 概述
对于 RDBMS 中的 Join 操作大伙一定非常熟悉,写 SQL 的时候要十分注意细节,稍
有差池就会耗时巨久造成很大的性能瓶颈,而在 Hadoop 中使用 MapReduce 框架进行 Join
的操作时同样耗时,但是由于 Hadoop 的分布式设计理念的特殊性,因此对于这种 Join
操作同样也具备了一定的特殊性。
4. 原理
使用 MapReduce 实现 Join 操作有多种实现方式:
在 Reduce 端连接为最为常见的模式:
Map 端的主要工作:为来自不同表(文件)的 key/value 对打标签以区别不同来源的记
录。然后用连接字段作为 key,其余部分和新加的标志作为 value,最后进行输出。
Reduce 端的主要工作:在 Reduce 端以连接字段作为 key 的分组已经完成,我们只
需要在每一个分组当中将那些来源于不同文件的记录(在 map 阶段已经打标志)分开,最
后进行笛卡尔只就 OK 了。
在 Map 端进行连接使用场景:一张表十分小、一张表很大。
用法:在提交作业的时候先将小表文件放到该作业的 DistributedCache 中,然后从
DistributeCache 中取出该小表进行 Join key / value 解释分割放到内存中(可以放大 Hash
Map 等等容器中)。然后扫描大表,看大表中的每条记录的 Join key /value 值是否能够在
内存中找到相同 Join key 的记录,如果有则直接输出结果。
SemiJoin
SemiJoin 就是所谓的半连接,其实仔细一看就是 Reduce Join 的一个变种,就是在
map 端过滤掉一些数据,在网络中只传输参与连接的数据不参与连接的数据不必在网络
中进行传输,从而减少了 shuffle 的网络传输量,使整体效率得到提高,其他思想和 Reduce
Join 是一模一样的。说得更加接地气一点就是将小表中参与 Join 的 key 单独抽出来通过
DistributedCach 分发到相关节点,然后将其取出放到内存中(可以放到 HashSet 中),在
map 阶段扫描连接表,将 Join key 不在内存 HashSet 中的记录过滤掉,让那些参与 Join
的记录通过 shuffle 传输到 Reduce 端进行 Join 操作,其他的和 Reduce Join 都是一样的。

实现步骤
1.先准备两个txt文件 (我创建的是 data.txt 和 info.txt 文件)
data.txt文件
info.txt文件
将这两个文档用 Xftp 传入到 虚拟机中

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值