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小时内删除。