Hadoop 的API开发步骤
需要将hadoop/contrib/hadoop-0.20.2-eclipse-plugin.jar添加到eplipse的安装目录的plugin目录中,然后重启eclipse即可。在重启eclipse之后需要在preference->Hadoop Map/Reduce选项中设置Hadoop的安装目录即可。
然后可以在View中选择Map/Reduce Locations视图,然后在视图中右键配置Hadoop的位置
host和port与 mapred-site.xml和core-site.xml文件中的配置一致
配置完成之后会显示有DFS Locations,单击选择disconnect然后connect或刷新就能显示HDFS系统中的目录树。
安装插件之后,可以在New Project页面建立M/R Project,便能自带编程所需API
例子1:数据筛选程序
任务要求:现有一批路由日志,需要提取MAC地址和时间,删去其他内容。
算法思路如下:
首先创建MapReduce Project,然后创建一个类Test1 继承Configured 实现Tool接口
定义Map函数
map的三个参数中前两个必须和继承类Mapper的前两个参数类型一致,表示输入数据的格式类型。这里行号存放在key中,行内容存放在value中。context是Hadoop的
上下文。
这里需要对错误进行处理,若不捕获错误整个程序即使快运行完毕也会崩溃得不到正确的结果。
Run方法:
Run方法是运行程序的一种实现,在Run方法可以设定一些基本数据,从而让系统了解该如何运行整个任务,
Main函数
只需在Main函数调用Run方法,系统就会启动一个MapReduce任务。
运行程序,点击run configur配置运行时参数:在运行之前需要将数据上传到DFS中,输出目录必须是不存在的,需要先删除已存在的目录再运行。
例子2:倒排序
任务要求
– 现有一批电话通信清单,记录了用户A拨打用户B的记录
– 需要做一个倒排索引,记录拨打给用户B的所有用户A
数据格式如下:
任务输出必须如下所示,主叫以‘ |’分割
算法思路:
Map函数的主要作用是把两个号码分割,然后被叫作为Key,主叫作为Value
Reduce函数:
Run方法:
带Reduce的任务:
1. 示例程序1不带Reduce任务,系统自动把Map函数的输出发送到输出文件,Map函数
的输出格式必须与程序输出格式一致
2. 示例程序2带有Reduce任务,系统首先把Mapper的输出中Key相同的部分都发送到同
一个Reducer,然后再把Reduce函数的结果输出,Map函数的输出格式必须和
Reduce函数的输入格式一致
程序导出:
对project点击右键-->Export
运行程序: