在 Eclipse 下的 Hadoop0.17.0(MapReduce)作业指导书
杨来 dillony@gmail.com
1. 导言
Hadoop 为分布式编程提供了一个理想的平台,普通的程序员只要理解了分布式的特点,就可以
轻易地实现分布式计算,而不需要理解分布式的细节。本文用实例讲解了在 Eclipse 下,使用 Hadoop
对数据集的统计度量的实现过程。
1.1. 预备条件
熟悉 java 编程和 Eclipse,了解 Hadoop,MapReduce,了解 linux;
已经建立了 Hadoop-0.17.0 环境;本文中 master 的 ip 为 10.63.0.60,用户为 root;
数据为实数。
2. 作业目标
2.1. 实现常用的统计度量
具体是对数据集的每个属性进行最小值、最大值、计数、求和、均值、方差等统计,相对应于
SQL操作中的min(), max(), cnt(), sum(), avg(), std()(参见6统计知识);
2.2. 性能要接近线性加速比
由于最小值、最大值、计数、求和 等操作为分布度量,必须遍历每个数据,算法复杂度为 O(n)。
均值、方差等代数度量 依赖于计数、求和,复杂度为 O(1),需要最后执行。
3. 作业方案
3.1. 处理对象
我们希望对.csv 文件格式的实型数据,如下表,进行列向的统计。各种小数形式、科学计数表
示的实型数据均应能识别。
9.0000000e+000
3.0000000e+000
6.0000000e+000
5.0000000e+000
9.0000000e+000
7.0000000e+000
5.0000000e+000
1.0000000e+000
8.0000000e+000
5.0000000e+000
6.0000000e+000
8.0000000e+000
9.0000000e+000
7.0000000e+000
2.0000000e+000
4.0000000e+000
9.0000000e+000
9.0000000e+000
4.0000000e+000
9.0000000e+000
1.0000000e+000
4.0000000e+000
8.0000000e+000
1.0000000e+000
2.0000000e+000
2.0000000e+000
2.0000000e+000
6.0000000e+000
3.2. 期望结果
理想的输出结果应该是如下:第一行为最小值、第二行为最大值、第三行为求和、第四行为
平方和、第五行为均值、第六行为方差计数。列的数目与输入数据一致。输出的格式为标准的.csv
文件,其以逗号为分隔符。
3.0,1.0,1.0,1.0
9.0,9.0,9.0,8.0
44.0,44.0,38.0,25.0
306.0,320.0,280.0,129.0
6.285714,6.285714,5.428571,3.5714285
2.2146692,2.6903703,3.505098,2.572751
4. 作业流程
4.1. MapReduce 插件
下载和安装
在 http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop2/mapreduce_plugin.zip 下 载
MapReduce 插件,并拷贝到 Eclipse 的 plugin。地址可能会过期失效,尝试查找。可能需要填写某些
资料和同意其声明。
用 MapReduce 插件编程
如图,在“新建”时,会出现“选择向导”,选择“MapReduce Project”,点击“下一步”;
对话框会提示没有 Hadoop 的运行库,也就是外部 JAR;选择“Specify Hadoop library location”,
给出“hadoop-xxxxx.core.jar”所在的目录;“xxxxx”表示版本。
MapReduce 透视图必须要选“是”,否则后续流程无法进行。
新建 Mapper 类
在“项目资源管理器”中对刚产生的项目点右键,出现如图菜单,选择“其他”。之后又会出
现“选择向导”,如下图,找到“Mapper”,点击“下一步”;
在下图中,提示“建议不要使用缺省包”。应该为类指定一个包的路径,方便代码的封装。本
例的名称为“WordM”,包为“src”。
之后,该插件会为新类生成必要的框架,如下图。
新建 Reducer 类
在新建的对话框中,选择“Reducer”。
如上图,程序架构已经产生,按照设计添加代码即可。
新建主类
在新建的对话框中,选择“MapReduce Driver”,即可生成必要的代码。
如上图,代码都已经产生,需要按照设计,更改输入和输出。向导产生的代码是用于计算词频
的,所以“KeyClass”为“Text.class”,“ValueClass”为“IntWritable.class”,实际可以按照需要,
使用其它 Writable 类。
注意,要将缺省的“setMapperClass”和“setReducerClass”改为刚才自己产生的类,比如“WordM”
和“WordR”。
在 Hadoop 上运行
如上图,在主类的窗口点击鼠标右键,出现菜单。选择“Run on Hadoop”,程序执行的情况将
会在控制台反映出来,相当方便。
MapReduce 透视图
为了能够使用该插件诸多功能,必须选择 MapReduce 透视图,如下。