云/大数据      Hadoop常用算法   
文章目录  [隐藏]

本文hadoop2.7.0



首先提供一个jar反编译器,挺好用
[download id="1421"]从%hadoop-2.7.0%\share\hadoop\mapreduce中找到hadoop-mapreduce-examples-2.7.0.jar
用jar反编译器打开即可查看/复制/保存其中的WordCount源码

注意本文代码不能通过@Test注解的方式运行。

1.WordCount

源数据,每个单词直接用空格隔开,可以写多行。

然后可以结合HDFS的javaapi写程序查看。或者直接shell。

2.Sort


3.去重


4.过滤


5.最大值


6. 前5最大值

本例有两个txt文件。注意每行一个数字,无空格/空行。

相关日志:


7.数量最大


8.单表关联


9.双表关联


这些内容曾发布在:
http://my.oschina.net/vigiles/blog/151138
http://www.cnblogs.com/vigiles/p/3623621.html
注意版本不同。

10.MapReduce参考流程图



例题

问:已知一个单身美女的坐标,和一群单身帅哥的坐标,求离美女最近的帅哥。
答:数学中有公式Math.sqrt(Math.abs(x-x2)*Math.abs(x-x2)+Math.abs(y-y2)*Math.abs(y-y2))可以求出两点的距离。
在Mapper中map遍历帅哥的坐标,就能得到每个帅哥和美女的距离。
将距离作为key、坐标作为value存入context。
MR运算,map执行结束后的shuffle过程,可以去除重复的key,并保存key对应的value,这样即使有多个帅哥和美女的距离相同也能保存下来;同时这个shuffle按照默认算法进行排序,数字按大小,字符按字典顺序。
所以到了Reduce时,已经是我们想要的结果,最上面的最小key就是最近距离。

其实是排序算法。

如果遇到执行中map或者reduce方法不执行且eclipse不报错的情况,多是因为job.setOutputKeyClass或FileOutputFormat.setOutputPath设置的输出类型不对,还有自定义Mapper/Reducer中泛型和context写出不匹配。

本例源数据(空格分开x、y坐标):
12 10
23 23
20 20
1 3
23 7
输出(第一行即是最近的):
10.295630140987 x:23,y:7
21.540659228538015 x:12,y:10
21.633307652783937 x:20,y:20
22.847319317591726 x:23,y:23
31.016124838541646 x:1,y:3

承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设