`
xuyuanshuaaa
  • 浏览: 393819 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

hadoop的wordcount程序

 
阅读更多
其实WordCount并不难,只是一下子接触到了很多的API,有一些陌生

package com.felix;

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

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reducer;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;
/**
 * 
 * 描述:WordCount explains by Felix
 * @author Hadoop Dev Group
 */
public class WordCount
{

    /**
     * MapReduceBase类:实现了Mapper和Reducer接口的基类(其中的方法只是实现接口,而未作任何事情)
     * Mapper接口:
     * WritableComparable接口:实现WritableComparable的类可以相互比较。所有被用作key的类应该实现此接口。
     * Reporter 则可用于报告整个应用的运行进度,本例中未使用。 
     * 
     */
    public static class Map extends MapReduceBase implements
            Mapper<LongWritable, Text, Text, IntWritable>
    {
        /**
         * LongWritable, IntWritable, Text 均是 Hadoop 中实现的用于封装 Java 数据类型的类,这些类实现了WritableComparable接口,
         * 都能够被串行化从而便于在分布式环境中进行数据交换,你可以将它们分别视为long,int,String 的替代品。
         */
        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();
        
        /**
         * Mapper接口中的map方法:
         * void map(K1 key, V1 value, OutputCollector<K2,V2> output, Reporter reporter)
         * 映射一个单个的输入k/v对到一个中间的k/v对
         * 输出对不需要和输入对是相同的类型,输入对可以映射到0个或多个输出对。
         * OutputCollector接口:收集Mapper和Reducer输出的<k,v>对。
         * OutputCollector接口的collect(k, v)方法:增加一个(k,v)对到output
         */
        public void map(LongWritable key, Text value,
                OutputCollector<Text, IntWritable> output, Reporter reporter)
                throws IOException
        {
            String line = value.toString();
            StringTokenizer tokenizer = new StringTokenizer(line);
            while (tokenizer.hasMoreTokens())
            {
                word.set(tokenizer.nextToken());
                output.collect(word, one);
            }
        }
    }

    public static class Reduce extends MapReduceBase implements
            Reducer<Text, IntWritable, Text, IntWritable>
    {
        public void reduce(Text key, Iterator<IntWritable> values,
                OutputCollector<Text, IntWritable> output, Reporter reporter)
                throws IOException
        {
            int sum = 0;
            while (values.hasNext())
            {
                sum += values.next().get();
            }
            output.collect(key, new IntWritable(sum));
        }
    }

    public static void main(String[] args) throws Exception
    {
        /**
         * JobConf:map/reduce的job配置类,向hadoop框架描述map-reduce执行的工作
         * 构造方法:JobConf()、JobConf(Class exampleClass)、JobConf(Configuration conf)等
         */
        JobConf conf = new JobConf(WordCount.class);
        conf.setJobName("wordcount");           //设置一个用户定义的job名称

        conf.setOutputKeyClass(Text.class);    //为job的输出数据设置Key类
        conf.setOutputValueClass(IntWritable.class);   //为job输出设置value类

        conf.setMapperClass(Map.class);         //为job设置Mapper类
        conf.setCombinerClass(Reduce.class);      //为job设置Combiner类
        conf.setReducerClass(Reduce.class);        //为job设置Reduce类

        conf.setInputFormat(TextInputFormat.class);    //为map-reduce任务设置InputFormat实现类
        conf.setOutputFormat(TextOutputFormat.class);  //为map-reduce任务设置OutputFormat实现类

        /**
         * InputFormat描述map-reduce中对job的输入定义
         * setInputPaths():为map-reduce job设置路径数组作为输入列表
         * setInputPath():为map-reduce job设置路径数组作为输出列表
         */
        FileInputFormat.setInputPaths(conf, new Path(args[0]));
        FileOutputFormat.setOutputPath(conf, new Path(args[1]));

        JobClient.runJob(conf);         //运行一个job
    }
}


分享到:
评论

相关推荐

    hadoop wordCount程序

    hadoop wordCount 程序 hadoop wordCount 程序是一种基于 Hadoop платформы的数据处理程序,用于统计文本文件中的单词出现次数。下面是该程序的详细知识点: Hadoop 介绍 Hadoop 是一个由 Apache ...

    WordCount2_hadoopwordcount_

    总结来说,`WordCount2_hadoopwordcount_`是Hadoop 2.x环境中优化过的单词统计程序,它处理了标点符号和大小写问题,提高了统计的准确性。`WordCount2.java`文件包含了该程序的源代码,展示了如何利用Hadoop的...

    hadoop wordcount 打包部署

    ### Hadoop WordCount项目打包与部署详解 #### 一、Hadoop WordCount...通过以上步骤,可以成功地在Hadoop环境下部署并运行WordCount程序。这不仅是一个基础的数据处理练习,也是深入了解Hadoop生态系统的重要一步。

    使用hadoop实现WordCount实验报告.docx

    实验报告的目的是详细记录使用Hadoop在Windows环境下实现WordCount应用的过程,包括环境配置、WordCount程序的实现以及实验结果分析。本实验旨在理解Hadoop分布式计算的基本原理,并熟悉Hadoop集群的搭建与管理。 #...

    hadoop运行wordcount实例

    #### 一、Hadoop简介与WordCount程序的重要性 Hadoop 是一个由Apache基金会所开发的分布式系统基础架构。它能够处理非常庞大的数据集,并且能够在集群上运行,通过将大数据分割成小数据块进行并行处理来实现高效的...

    hadoop 运行成功代码(wordcount)

    本项目将详细介绍如何在Hadoop环境中成功运行WordCount程序,以及涉及到的相关知识点。 首先,`Hadoop`是一个基于Java的框架,设计用来处理和存储大规模数据。它采用了分布式计算模型,即MapReduce,将大型任务分解...

    实验2-在Hadoop平台上部署WordCount程序-孙淼1

    实验2的目的是在Hadoop平台上部署WordCount程序,以此来理解和体验云计算的基础应用。这个实验主要涉及以下几个关键知识点: 1. **Linux系统基础**:实验要求学生具备Linux系统的使用知识,包括基本的命令行操作、...

    hadoop-wordcount测试程序

    hadoop-wordcount测试程序,jar包,单词统计的不二之选

    Hadoop示例程序WordCount运行及详解

    WordCount程序可以帮助我们更好地理解Hadoop的map-reduce编程模型,并掌握基于Hadoop的词频统计技术。本文中的示例程序可以作为学习Hadoop的map-reduce模型的参考。 知识点: 1. Hadoop平台上进行WordCount的实现 ...

    实验2-在Hadoop平台上部署WordCount程序1

    【标题】:在Hadoop平台上部署WordCount程序的详解 【描述】:本实验旨在让学生掌握如何在Hadoop平台上部署并运行WordCount程序,这是Hadoop入门的经典案例,旨在统计文本中的单词出现次数。通过实践,学生将了解...

    hadoop之wordcount例程代码

    运行WordCount程序时,Hadoop会自动将数据分发到集群的各个节点上,每个节点上的TaskTracker会执行对应的Map任务。当Map任务完成,中间结果会被排序和分区,然后传递给Reduce任务。Reduce任务最终将结果写回到HDFS,...

    hadoop实现wordcount

    WordCount程序就是这种理念的一个典型应用,它统计输入文本中每个单词出现的次数。 首先,我们需要理解MapReduce的工作流程。Map阶段,原始数据被分割成多个块(split),每个块由一个mapper处理。在"wordcount...

    hadoop1.2.1修改WordCount并编译

    "Hadoop 1.2.1 版本下修改 WordCount 程序并编译" Hadoop 是一种基于分布式处理的大数据处理框架,其中 WordCount 程序是一个经典的示例程序,用于统计文本文件中的词频信息。在 Hadoop 1.2.1 版本下,我们可以修改...

    Hadoop mapreduce实现wordcount

    在实际环境中,我们需要配置 Hadoop 集群,设置输入文件路径,编译并打包 WordCount 程序,最后通过 Hadoop 的 `hadoop jar` 命令提交作业到集群运行。调试时,可以查看日志输出,检查错误信息,优化性能。 通过...

    Hadoop开发WordCount源码详细讲解

    Hadoop开发WordCount源码程序详细讲解,每一行都带注释说明。

    ubuntu运行hadoop的wordcount

    - 上述命令中,`hadoop-0.20.2-examples.jar`是Hadoop自带的例子程序集合,包含了WordCount等示例程序。 - `wordcount`表示执行WordCount任务。 - `input`和`output`分别代表输入文件夹和输出文件夹路径。 #### ...

    大数据实验报告Hadoop编程实现wordcount单词统计程序附源码.doc

    大数据实验报告 Hadoop 编程实现 wordcount 单词统计程序附源码 本实验报告旨在介绍使用 Hadoop 编程实现 wordcount 单词统计程序的步骤和代码实现。实验的目的在于熟悉 Hadoop 虚拟机的安装与环境的配置,初步理解...

    hadoop demo wordcount

    WordCount程序的实现分为两个阶段:Map和Reduce。在Map阶段,程序会读取输入文件,将每个文档分割成单词,并为每个单词生成一个键值对(&lt;单词, 1&gt;)。这个过程在多台机器上并行执行,大大提高了处理速度。然后,...

    Hadoop安装教程和Wordcount示例

    文档详细的描述了Hadoop在Linux上的安装过程,并且附带了Wordcount程序示例

    hadoop wordcount

    Hadoop的WordCount程序是一个经典的分布式计算示例,它展示了如何在Hadoop框架下进行大规模数据处理。这个程序的主要目标是统计一组文本文件中每个单词出现的频率。在这个过程中,Hadoop利用其并行计算能力和任务...

Global site tag (gtag.js) - Google Analytics