Hadoop——MapJoin(减少数据倾斜)

首先,先说一下当前了解到的一个适用MapJoin的场景吧:

比如我们此时手中有两个表需要我们进行处理,但是呢一个很大,一个很小。那么这个时候我们比较适合使用MapJoin进行处理。

那么我们具体是怎么实现MapJoin的这个操作的呢?:

我们可以在map端对小的那个表先进行缓存,提前在map端将数据进行处理,那么这么做有什么好处呢,我们可以减少reduce端的压力、加快数据传输的速度、尽可能的减少reduce端出现数据倾斜(暂时个人理解为:因为每个map端的大小是可以设置的默认是128M,在map端进行处理应该不会因为某一个键特别多导致数据倾斜的发生,而且每个mapTask都是并行的。呃……没得到确认暂时先这么理解,有问题会修改。)

具体实现:
在map的setup阶段对小的文件进行缓存到:
当然在驱动类之中还需要加上job.addCacheFile(new URI(“file:///D:/Hadoop/11_input/tablecache/pd.txt”));
Hadoop——MapJoin(减少数据倾斜)
小表样例:
Hadoop——MapJoin(减少数据倾斜)

然后在map阶段将大表的文件进行读取,按照需求将大表中的数据和从HashMap中提取出的数据合并输出。

Hadoop——MapJoin(减少数据倾斜)

上一篇:【单点】每日突破,MapReduce调优篇


下一篇:Linux环境下对浏览器用户搜索记录进行大数据处理(自己的大数据大作业附数据集和代码)