Hadoop经典案例(排序&Join&topk&小文件合并)

①自定义按某列排序,二次排序

writablecomparable中的compareto方法

②topk

a利用treemap,缺点:map中的key不允许重复:https://blog.csdn.net/u010660276/article/details/50967054

b封装mapper<key,value>中的key实现writablecompareable接口,实现排序https://blog.csdn.net/lzm1340458776/article/details/43228191

③自定义分区函数:实现按省份输出信息

分区的目的:将相同的key值放到一个reduce中处理,将reduce处理完的数据按key分别存到不同的文件中

④数据去重

由于在map阶段之后会将相同key的value分组,分组之后的每一个key都是唯一的,消除数据去重时可以将数据直接作为map的key然后输出,map之后就会是唯一的,在reduce阶段直接输出就可。

⑤常用的输入格式https://blog.csdn.net/u011812294/article/details/63262624

⑥mapreduce中的join:map端join和reduce端join(将需要连接操作的表同时或者选择小的加载到内存中)

map端join和reduce端join举例:https://blog.csdn.net/litianxiang_kaola/article/details/71598632

https://blog.csdn.net/guxin0729/article/details/84035513

map端join:在map的setup()中将小的表加入hashmap中,(指定小表path将表存入话说hashmap中)(在setup中读取小文件)

      map()中实现读取一行将条件去匹配hashmap中的值,构造join表类

      在main()中只需要指定inputmapperpath为map()中需要读取的大文件即可

reduce端join:mapper中将条件作为key,join的类为value

      reducer中创建ArrayList,然后实现join

两者的对比:https://blog.csdn.net/weixin_39979119/article/details/85041438

如何选择:

reduce端join,当两个文件的大小差距较大时,会产生数据倾斜,在reducer中需要结合List

map端join,仅适用于大小表或者小小表关联

 ⑦小文件合并

原文地址:https://www.cnblogs.com/chengdonghui/p/10431010.html