一、配置开发环境
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. 开启Win7多用户登录远程桌面

    原文链接: http://blog.sina.com.cn/s/blog_7e5da5b101014fc4.html 多用户登陆破解:(支持win7 x86 & win7x64)在 Windo ...

  2. Datatable.Select()用法简介

    DataTable是我们在进行开发时经常用到的一个类,并且经常需要对DataTable中的数据进行筛选等操作,下面就介绍一下Datatable中经常用到的一个方法——Select,微软提供了四个函数的 ...

  3. mysql - 语法复习与学习

    //本月的第一天,最后一天 $start=date('Y-m-01', strtotime(date("Y-m-d"))); echo date('Y-m-d', strtotim ...

  4. php-fpm 启动参数及重要配置详解(转)

    约定几个目录 /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php.ini 一,php- ...

  5. 怎么样快速完整备份和压缩 很大的 sqlserver 1TB 数据库 -摘自网络

    How to increase SQL Database Full Backup speed using compression and Solid State Disks The SQL 2008 ...

  6. TreeMap升序|降序排列和按照value进行排序

    TreeMap 升序|降序排列 import java.util.Comparator; import java.util.TreeMap; public class Main { public st ...

  7. Django修改用户名密码的方法

    1.python manage.py shell 2.from django.contrib.auth.models import User 3.user=User.objects.get(usern ...

  8. linux系统下添加新硬盘的方法详解

    对于linux新手来说,在linux上添加新硬盘,是很有挑战性的一项工作. 在Linux服务器上把硬盘接好,启动linux,以root登陆. fdisk -l ## 这里是查看目前系统上有几块硬盘 D ...

  9. 【Android】16.5 Android内置的系统服务

    分类:C#.Android.VS2015: 创建日期:2016-03-01 一.简介 实际上,在Android.Content.Context类中,Android已经提供了多种类型的系统服务,这些服务 ...

  10. python 中安装pandas

    由于计算arima模型需要用到pandas,费尽千辛万苦找到了一个下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/,在这里能下载到很多我们要用的模块.找到 ...