一、配置开发环境
1.我们用到的IDE是eclipse。要用它进行hadoop编程,要给eclipse安装hadoop自带的插件。(有的版本以源码提供插件,需要用户根据需要自己编译)
2.用到的eclipse版本是:eclipse-jee-indigo-SR2-linux-gtk.tar.gz
hadoop的版本是:hadoop-1.0.4.tar.gz
hadoop1.0.4提供的插件就是源码形式。我从网上下载了一个已经编译好的插件,其具体名称为:hadoop-eclipse-plugin-1.0.4.jar
3.把hadoop自带的插件或者自己编译的插件放到eclipse/plugins/目录下面。然后重启eclipse,有时插件加载可能失败,这时可以用命令行eclipse -clean启动。
如果插件安装成功的话,点击file->new->project。此时就会出现Map/Reduce project这个项目。
4.然后在eclipse里面点击window->preferences->Hadoop MapReduce。右边出现hadoop installation directory:在后面的输入框中输入hadoop的安装目录。依次点击apply->ok就可以啦。
5.在eclipse中,点击window->show view->other->MapReduce Tools->Map/Reduce Locations,再点ok。接下来,在eclipse的正下方会出现Map/Reduce Locations。在空白出右击,然后选new hadoop location。接着出现define hadoop location对话框。然后在location name处随意给个名字。在Map/Reduce Master处根据HADOOP_HOME/conf/mapred-site.xml中的信息进行填写。在DFS Master处根据HADOOP_HOME/conf/core-site.xml。如果core-site.xml下只有localhost而没有端口号,默认的就是8020,设置好后finish就可以啦。
上面这些设置完成以后,就可以在project explorer的DFS Location里面看见分布式文件系统的目录结构了。

二、建立hadoop项目-----Dedup.java
1.在eclipse中点击file->new ->Map/Reduce project。填上project name以后,然后直接finish即可。
2.在src/目录下建立一个类。Dedup.java相应的包名称为:com.hadoop.test。
3.按照程序中给定的输入目录(有时在运行时通过参数进行指定),在HDFS中创建相应的输入目录,然后把相关的输入文件传送到那个输入目录当中去。当程序运行之前输出目录不能存在,否则会出现错误信息。在HDFS中默认的当前工作目录是/user/root/。如果指定目录时直接使用目录名,那么input_folder and output_folder都应当在/user/root/下面出现。
4.在Dedup.java界面中右击选择Run As ->Run on hadoop。如果已经有hadoop location的话,选择choose an existing server from the list belowl.否则define a new hadoop server location.弹出define hadoop location对话框,具体操作上面已经提到。最后点击finish就可以完成相关操作。从而运行hadoop程序。

三、注意事项
1.如果new一个java project。编写相应hadoop程序,并把相应的jar包加到classpath当中去。然后点击运行run as->java application的话,项目中涉及到的输入和输出目录将都是本地目录。而且默认的当前工作目录是:System.out.println(System.getProperty("user.dir"))输出的目录。此时相应的输入和输出目录都在这个当前工作目录下。

四、本文提到的Dedup.java源码如下:
package com.hadoop.test;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Job;

import org.apache.hadoop.mapreduce.Mapper;

import org.apache.hadoop.mapreduce.Reducer;

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import org.apache.hadoop.util.GenericOptionsParser;

public class Dedup {

// map将输入中的value复制到输出数据的key上,并直接输出

public static class Map extends Mapper {

private static Text line = new Text();// 每行数据

// 实现map函数

public void map(Object key, Text value, Context context)

throws IOException, InterruptedException {

line = value;

context.write(line, new Text(""));

}

}

// reduce将输入中的key复制到输出数据的key上,并直接输出

public static class Reduce extends Reducer {

// 实现reduce函数

public void reduce(Text key, Iterable values, Context context)

throws IOException, InterruptedException {

context.write(key, new Text(""));

}

}

public static void main(String[] args) throws Exception {

Configuration conf = new Configuration();

String[] ioArgs = new String[] { "dedup_in", "dedup_out" };

// String[] otherArgs = new GenericOptionsParser(conf, ioArgs)
        // .getRemainingArgs();
        //
        // if (otherArgs.length != 2) {
        //
        // System.err.println("Usage: Data Deduplication ");
        //
        // System.exit(2);
        //
        // }

@SuppressWarnings("deprecation")
        Job job = new Job(conf, "Data Deduplication");

job.setJarByClass(Dedup.class);

// 设置Map、Combine和Reduce处理类

job.setMapperClass(Map.class);

job.setCombinerClass(Reduce.class);

job.setReducerClass(Reduce.class);

// 设置输出类型

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(Text.class);

// 设置输入和输出目录

// FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
        //
        // FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
        FileInputFormat.addInputPath(job, new Path(ioArgs[0]));

FileOutputFormat.setOutputPath(job, new Path(ioArgs[1]));

System.exit(job.waitForCompletion(true) ? 0 : 1);

}

}

同时也可以看看这篇文章:http://blog.sina.com.cn/s/blog_7deb436e0101kh0d.html

 
 
 
 

hadoop集群运行dedup实现去重功能的更多相关文章

  1. Hadoop集群运行JNI程序

    要在Hadoop集群运行上运行JNI程序,首先要在单机上调试程序直到可以正确运行JNI程序,之后移植到Hadoop集群就是水到渠成的事情. Hadoop运行程序的方式是通过jar包,所以我们需要将所有 ...

  2. 编写hadoop程序,并打包jar到hadoop集群运行

    windows环境下编写hadoop程序 新建:File->new->Project->Maven->next GroupId 和ArtifactId 随便写(还是建议规范点) ...

  3. 简单说明hadoop集群运行三种模式和配置文件

    Hadoop的运行模式分为3种:本地运行模式,伪分布运行模式,集群运行模式,相应概念如下: 1.独立模式即本地运行模式(standalone或local mode)无需运行任何守护进程(daemon) ...

  4. 编写hadoop程序并打成jar包上传到hadoop集群运行

    准备工作: 1. hadoop集群(我用的是hadoop-2.7.3版本),这里hadoop有两种:1是编译好的hadoop-2.7.3:2是源代码hadoop-2.7.3-src: 2. 自己的机器 ...

  5. 攻城狮在路上(陆)-- 提交运行MapReduce程序到hadoop集群运行

    此种方式不能直接在eclipse中调试代码. 首先需要在src下放置服务器上的hadoop配置文件:core-site.xml\yarn-site.xml\hdfs-site.xml\mapred-s ...

  6. hadoop集群运行jps命令以后Datanode节点未启动的解决办法

    出现该问题的原因:在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令(hdfs namenode -format),这时namenode的clusterID会重新生成,而da ...

  7. Hadoop集群运行

    在Hadoop文件参数配置完成之后 在master上操作 su - hadoop cd /usr/local/src/hadoop/ ./bin/hdfs namenode -format hadoo ...

  8. 基于Docker快速搭建多节点Hadoop集群--已验证

    Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中.这篇教程介绍了利用Docker在单机上快速搭建多节点 Hadoop集群的详细步骤.作者在发现目前的Hadoop ...

  9. [转]大数据hadoop集群硬件选择

      问题导读 1.哪些情况会遇到io受限制? 2.哪些情况会遇到cpu受限制? 3.如何选择机器配置类型? 4.为数据节点/任务追踪器提供的推荐哪些规格? 随着Apache Hadoop的起步,云客户 ...

随机推荐

  1. apache主机(网站)配置,port监听,文件夹訪问权限及分布式权限

    前言 一个网站的两个核心信息为: 主机名称(server名/网站名):ServerName server名 网站位置(网站文件夹路径):DocumentRoot "实际物理路径" ...

  2. 软件测试自动化之- 基于反射的UI自动化测试框架 - UI Automation Test Framework

    测试自动化程序的任务 基于反射的ui测试自动化程序,要完成的6项任务: 通过某种方式从测试套件程序中运行待测程序(AUT: Applicaton Under Test),以便于两个程序之间进行通信 操 ...

  3. unity, Find References In Scene

    材质,脚本,shader等都可以通过Find References In Scene查看引用情况,如图. 当对一个文件点击Find References In Scene后,搜索命令会显示到Scene ...

  4. rubygems ruby国内源

    rubygems.org资源不能正常访问,需要调整一下GEM的source镜像 1.首先确认一下当前source镜像地址 gem sources -l 服务器为 https://    ruby    ...

  5. redis 只允许指定的额内网IP访问,其余的外网IP不允许访问

    为了redis的安全,现在设定如下规则.只允许指定的服务器通过内网的方式访问.其余一律不准访问 因为redis登录额时候是不需要密码的,很不安全. 所以这里添加如下iptables规则 iptable ...

  6. 【Android】3.7 UI控制功能

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 简介:介绍开关手势功能和显示隐藏UI控件 详述: (1)地图操作开关:平移.缩放.双击放大.双指操作 ...

  7. 【Android】5.2 图像按钮和图片格式

    分类:C#.Android.VS2015: 创建日期:2016-02-07 一.简介 1.ImageBtton ImageBtton的用法和Button相似,也有Click事件,用法也和Button一 ...

  8. Java多线程和并发基础

    第一:Java多线程面试问题 1:进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运 ...

  9. 每日英语:Mercedes Sheds Its 'Old' Design

    Daimler AG's flagship Mercedes-Benz often gets the rap for being an 'old man's car.' More unusual is ...

  10. Echart的基础开发模板

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...