hadoop Map/Reduce开发实例
1) Eclipse插件配置与程序开发
在windows下开发Map/Readuce程序,首先要在windows安装cygwin, 目的是让hadoop在执行过程中可以用到linux下的一些shell命令,sygwin则给window装了一个linux外壳。
配置eclipse及运行程序具体步骤如下:
1. 安装cygwin步骤略过(网上安装步骤很多,因为不是此篇文章重点,不再赘述)
但值得注意的在安装过程中一定要安装 以下部分
(1). net下的openssh和openssl,base下的 sed,devel下的subversion
(2). 设置环境变量path, 需要 设置 Cygwin 的bin 目录 ,具体是否需要设置 Cygwin 的usr\bin 目录还不是很确定,但本人设置了
提示:cygwin安装完成后会有cygwin ssd服务在windows服务中,可以启动也可以不启动。
2. 下载并安装hadoop,(本人使用hadoop0.20.2版本)
下载:/i/hadoop/core/
安装:即将hadoop-0.20.解压即可
2. 下载并安装 hadoop eclipse插件
(1)下载插件:/jira/browse/MAPREDUCE-1280
(注意:此hadoop-eclipse-plugin-0.20.3-SNAPSHOT.jar插件支持eclipse3.4+, hadoop0.20.2目录 hadoop-0.20.2\contrib\eclipse-plugin中的插件只支持到eclipse3.3版本,版本不支持的话,导致插件不能正常使用。)
(2). 将插件拷贝到eclipse的plugins目录中(使用其他方法装载插件也可以),启动eclipse
(3). 配置插件
hadoop安装详细步骤linuxa. 打开eclipse -->window->open prespective,可见并打开“ Map/Reduce ” 视图,如图:
b. 打开eclipse -->window->show view, 可见并打开 MapReduce tool --> Map/Reduce locations ,点击
新建locations,视图如下:
General选项卡各个参数说明:
Location name:本地视图的location名称,自己自定义一个名称即可
Map/Reduce Master组内 host和port: 为 Map/Reduce Master的地址与端口号,此地址端口与hadoop服务器安装配置过程中 l文件中 acker节点值一致。
DFS Master组内host和port: 此为HDFS服务器Master的地址与端口号, 此地址与hadoop服务器安装配置过程中 conf /l文件中 fs.default.name节点值一致。
Username: 远程hadoop服务器登陆用户名。
SOCKS proxy: 如果登陆hadoop服务器需要代理的话,此组填入代理服务器的地址和端口
Advanced parameters选项卡部分参数说明(各个未提及参数请参见hadoop官方文档):
p.dir : HDFS文件存取缓存目录, 此项与hadoop服务器安装配置过程中 conf /l文件中 p.dir节点值一致。
Hadoop.name.dir: HDFS 的namenode 节点 name存储目录,此项与hadoop服务器安装配置过程中 conf /l文件中dfs.name.dir节点值一致。 如此节点未配置,取默认选项 ${ p.dir }/dfs/name, 此目录 namenode节点上出现
Hadoop.data.dir : HDFS的datanode节点data存储目录,此项hadoop服务器安装配置过程中 conf /l文件中dfs.data.dir节点值一致。如此节点未配置,取默认选项 ${ p.dir }/dfs/data,此目录在各 datanode节点上出现
Hadoop.job.ugi: 登陆HDFS用户及用户组,使用格式为: 用户名,用户组
C.配置完location后,将会在 project Explorer 中出现 DFS locations ,此时即可看到hadoop数据仓库中的文件夹及文件了,如图:
同时也可以在此界面上做文件新建上传删除操作 等等。
D.配置hadoop环境
打开 eclipse -> window ->Prefereces ,点击Hadoop Map/Reduce ,浏览到hadoop解压的根目录。如图:
3.新建 Map/Reduce工程并运行
新建 Map/Reduce project, 即可在工程中建立 Mapper,Reducer,MapReduce Driver类,如图:
添加hadoop依赖jar包, 添加到 项目->properties -> Java build path -> libraries, 按需加入hadoop目录下及lib下的jar包。
4. 运行如下示例:
Mapper代码如下:
package test.map;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class MapA extends Mapper<Object, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
StringTokenizer itr = new String());
while (itr.hasMoreTokens()) {
word.Token());
context.write(word, one);
}
}
}
Deducer代码如下:
duce;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class ReduceA extends Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += ();
}
result.set(sum);
context.write(key, result);
}
}
MapReduce Driver代码如下:
package test;
import java.io.IOException;
import org.f.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论