Hadoop2.6.0版本MapReudce示例之WordCount

一、准备测试数据

1、在本地Linux系统/var/lib/hadoop-hdfs/file/路径下准备两个文件file1.txt和file2.txt,文件列表及各自内容如下图所示:

2、在hdfs中,准备/input路径,并上传两个文件file1.txt和file2.txt,如下图所示:

二、编写代码,封装Jar包并上传至linux

将代码封装成TestMapReduce.jar,并上传至linux的/usr/local路径下,如下图所示:

三、运行命令

执行命令如下:hadoop jar /usr/local/TestMapReduce.jar com.jngreen.mapreduce.test.WordCount /input/file1.txt /input/file2.txt /output/output

命令执行过程截图如下:

四、查看运行结果

查看hdfs输出路径/output下的结果,如下图所示:

运行结果为Hello 4、Hadoop 1、Man 1、Boy 1、Word 1,完全正确!

五、WordCount展示

源码如下:

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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;

public class WordCount {

  // TokenizerMapper作为Map阶段,需要继承Mapper,并重写map()函数
  public static class TokenizerMapper
       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作为分词器,对value进行分词
      StringTokenizer itr = new StringTokenizer(value.toString());

      // 遍历分词后结果
      while (itr.hasMoreTokens()) {

    	// 将String设置入Text类型word
        word.set(itr.nextToken());
        // 将(word,1),即(Text,IntWritable)写入上下文context,供后续Reduce阶段使用
        context.write(word, one);
      }
    }
  }

  // IntSumReducer作为Reduce阶段,需要继承Reducer,并重写reduce()函数
  public static class IntSumReducer
       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;
      // 遍历map阶段输出结果中的values中每个val,累加至sum
      for (IntWritable val : values) {
        sum += val.get();
      }

      // 将sum设置入IntWritable类型result
      result.set(sum);

      // 通过上下文context的write()方法,输出结果(key, result),即(Text,IntWritable)
      context.write(key, result);
    }
  }

  public static void main(String[] args) throws Exception {
    // 加载hadoop配置
	Configuration conf = new Configuration();

	// 校验命令行输入参数
	if (args.length < 2) {
      System.err.println("Usage: wordcount <in> [<in>...] <out>");
      System.exit(2);
    }

	// 构造一个Job实例job,并命名为"word count"
    Job job = new Job(conf, "word count");

    // 设置jar
    job.setJarByClass(WordCount.class);

    // 设置Mapper
    job.setMapperClass(TokenizerMapper.class);
    // 设置Combiner
    job.setCombinerClass(IntSumReducer.class);
    // 设置Reducer
    job.setReducerClass(IntSumReducer.class);
    // 设置OutputKey
    job.setOutputKeyClass(Text.class);
    // 设置OutputValue
    job.setOutputValueClass(IntWritable.class);

    // 添加输入路径
    for (int i = 0; i < args.length - 1; ++i) {
      FileInputFormat.addInputPath(job, new Path(args[i]));
    }

    // 添加输出路径
    FileOutputFormat.setOutputPath(job,
      new Path(args[args.length - 1]));

    // 等待作业job运行完成并退出
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}
时间: 2024-08-12 05:11:13

Hadoop2.6.0版本MapReudce示例之WordCount的相关文章

Hadoop2.6.0版本MapReudce示例之WordCount(二)

继<Hadoop2.6.0版本MapReudce示例之WordCount(一)>之后,我们继续看MapReduce的WordCount示例,看看如何监控作业运行或查看历史记录,以及作业运行时的文件目录及列表. 1.监控作业运行或查看历史记录 在WordCount的输出内容中,有这么一句:The url to track the job: http://server2:8088/proxy/application_1459913635503_0004/,这个是追踪作业运行的意思,登录后,可以查看

Hadoop2.6.0版本号MapReudce演示样例之WordCount(一)

一.准备測试数据 1.在本地Linux系统/var/lib/hadoop-hdfs/file/路径下准备两个文件file1.txt和file2.txt,文件列表及各自内容例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 2.在hdfs中.准备/input路径,并上传两个文件fil

关于hadoop-2.2.0和hadoop2.6.0的winutils.exe、hadoop.dll版本混用(易出错)

问题详情是 2016-12-10 23:24:13,317 INFO [org.apache.hadoop.metrics.jvm.JvmMetrics] - Initializing JVM Metrics with processName=JobTracker, sessionId=2016-12-10 23:24:14,281 WARN [org.apache.hadoop.mapreduce.JobSubmitter] - Hadoop command-line option parsi

搭建Hadoop2.6.0+Eclipse开发调试环境

上一篇在win7虚拟机下搭建了hadoop2.6.0伪分布式环境.为了开发调试方便,本文介绍在eclipse下搭建开发环境,连接和提交任务到hadoop集群. 1. 环境 Eclipse版本Luna 4.4.1 安装插件hadoop-eclipse-plugin-2.6.0.jar,下载后放到eclipse/plugins目录即可. 2. 配置插件 2.1 配置hadoop主目录 解压缩hadoop-2.6.0.tar.gz到C:\Downloads\hadoop-2.6.0,在eclipse的

ubuntu14.04环境下hadoop2.7.0配置+在windows下远程eclipse和hdfs的调用

本教程是在三台电脑上部署的hadoop正式环境,没有建立用户组,而是在当前用户下直接进行集群的部署的,总结如下: 1.三个节点的主机电脑名为:192.168.11.33 Master,192.168.11.24 Slaver2,192.168.11.4 Slaver1,并且这三台主机用户名都要设置一样,我的都是hadoop的用户. 因为本教程使用的是vim编辑器,如果没有vim可以下载一个:sudo apt-get install vim 2.修改hosts文件:切换到root用户下:sudo 

ubutun14.04编译hadoop-2.6.0源码,并生成eclipse项目

1.安装jdk 2. 安装需要的库 sudo apt-get install g++ autoconf automake libtool make cmake zlib1g-dev pkg-config libssl-dev 3. sudo apt-get install openssh-client sudo apt-get install openssh-server -进入到用户目录运行命令: -ssh-keygen -t rsa -P -cat .ssh/id_rsa.pub >> .

第一个hadoop程序(hadoop2.4.0集群+Eclipse环境)

一.Eclipse hadoop环境配置  1. 在我的电脑右键->属性->高级系统设置->环境变量,配置环境变量: JAVA_HOME=D:\ProgramFiles\Java\jdk1.7.0_67, HADOOP_HOME=D:\TEDP_Software\hadoop-2.4.0, PATH=.;%JAVA_HOME%\bin;%HADOOP_HOME%\bin; 2. 在Eclipse中安装好hadoop-eclipse-kepler-plugin-2.2.0.jar插件,并配

Hadoop-2.6.0 + Zookeeper-3.4.6 + HBase-0.98.9-hadoop2环境搭建示例

1    基本信息 1.1     软件信息 hadoop-2.6.0 zookeeper-3.4.6 hbase-0.98.9-hadoop2 (以下示例中使用的操作系统是Centos 6.5,请将下载的3个tar包分别解压并放置在/usr/local/目录下) (Hbase包中lib里可以看到zookeeper的jar包,从文件名可以确定使用的zookeeper版本) 1.2     集群组成: Server Name Hadoop Cluster Zookeeper Ensemble HB

Hadoop-2.4.0安装和wordcount执行验证

Hadoop-2.4.0安装和wordcount执行验证 下面描写叙述了64位centos6.5机器下,安装32位hadoop-2.4.0,并通过执行 系统自带的WordCount样例来验证服务正确性的步骤. 建立文件夹 /home/QiumingLu/hadoop-2.4.0,以后这个是hadoop的安装文件夹. 安装hadoop-2.4.0,解压hadoop-2.4.0.tar.gz到文件夹 /home/QiumingLu/hadoop-2.4.0就可以 [[email protected]