hadoop2.2.0的WordCount程序

package com.my.mapreduce.wordcount;

import java.io.IOException;

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

/**
 * MapReduce中的WordCount
 * @author yao
 *
 */
public class WordCount {

/**
     * MapReduce中的map函数的泛型
     * KEYIN        map函数读取文件行内容的偏移量为key
     * VALUEIN         map函数读取文件行内容
     * KEYOUT        map函数处理后输出到reduce函数的key
     * VALUEOUT        map函数处理后输出到reduce函数的value
     * @author yao
     *
     */
    static class WcMap extends Mapper<LongWritable, Text, Text, LongWritable>{
        private static final LongWritable ONE = new LongWritable(1l);
        public void map(LongWritable key, Text value, Context context) throws IOException ,InterruptedException {
            String[] words = value.toString().split(" ");
            for (String word : words) {
                context.write(new Text(word), ONE);
            }
        }
    }
    
    /**
     * MapReduce中的reduce函数的泛型
     * KEYIN        reduce函数读取map函数输出的key
     * VALUEIN        reduce函数读取map函数输出的value
     * KEYOUT        reduce函数处理后输出到hdfs上文件的key
     * VALUEOUT        reduce函数处理后输出到hdfs上文件的value
     * @author yao
     *
     */
    static class WcReduce extends Reducer<Text, LongWritable, Text, LongWritable>{
        public void reduce(Text key, Iterable<LongWritable> value, Context context) throws java.io.IOException ,InterruptedException {
            long count = 0;
            for (LongWritable i : value) {
                count += i.get();
            }
            context.write(key, new LongWritable(count));
        }
    }
    
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
        Configuration conf = new Configuration();                                            //new配置对象,默认读取顺序是default-site.xml<core-site.xml
        
        String[] paths = new GenericOptionsParser(conf, args).getRemainingArgs();
        if (paths.length != 2) {
            System.err.println("Usage: " + WordCount.class.getName() + " <in> <out>");
            System.exit(2);
        }
        
        Job job = Job.getInstance(conf, WordCount.class.getSimpleName());                    //1.x是new Job,2.x为Job.getInstance
        job.setJarByClass(WordCount.class);                                                    //设置main方法所在的类
        
        FileInputFormat.setInputPaths(job, new Path(args[0]));                                //设置当前作业的输入路径(可有多个输入路径)
        job.setMapperClass(WcMap.class);                                                    //指定自定义的map函数
        job.setMapOutputKeyClass(Text.class);                                                //指定自定义map函数的输出到reduce函数的key类型
        job.setMapOutputValueClass(LongWritable.class);                                        //指定自定义map函数的输出到reduce函数的value类型
        
        job.setCombinerClass(WcReduce.class);                                                //在map函数输出到reduce函数进行本地合并以减少网络传输的带宽资源(根据需求使用,并不适用所有业务)
        
        job.setReducerClass(WcReduce.class);                                                //指定自定义的reduce函数
        job.setOutputKeyClass(Text.class);                                                    //指定自定义的reduce函数输出到hdfs的key类型
        job.setOutputValueClass(LongWritable.class);                                        //指定自定义的reduce函数输出到hdfs的value类型
        FileOutputFormat.setOutputPath(job, new Path(args[1]));                                //设置当前作业的输出到hdfs的路径(只有一个输出路径且该路径必须不存在)
        
        int status = job.waitForCompletion(true) == true ? 0 : 1;                            //提交作业:true是打印作业进度详情,false则是不打印
        System.exit(status);
    }

}

时间: 2024-10-05 09:44:39

hadoop2.2.0的WordCount程序的相关文章

hadoop2.7.0实践- WordCount

环境要求 说明:本文档为wordcount的mapreduce job编写及运行文档. 操作系统:Ubuntu14 x64位 Hadoop:Hadoop 2.7.0 Hadoop官网:http://hadoop.apache.org/releases.html MapReduce参照官网步骤: http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTu

搭建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的

第一个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插件,并配

使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0

使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0 网上的 MapReduce WordCount 教程对于如何编译 WordCount.java 几乎是一笔带过… 而有写到的,大多又是 0.20 等旧版本版本的做法,即 javac -classpath /usr/local/hadoop/hadoop-1.0.1/hadoop-core-1.0.1.jar WordCount.java,但较新的 2.X 版本中,已经没有 hadoop-core*.jar 这个文件,因此

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]

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/,这个是追踪作业运行的意思,登录后,可以查看

wordcount程序出现map 100% reduce 0%问题的解决方法

运行wordcount程序一直停在map 100% reduce 0%, input文件夹的内容: 其中: f1.txt中的内容为:hello hadoop f2.txt中的内容为:hello hadoop f3.txt中的内容为:hello world 解决方法: 在/etc/hosts中增加以下红色一行,其中第一列为127.0.0.1,第二列为主机名称: 然后重新使用start-all.sh启动hadoop,然后执行wordcount程序,然后可以看到执行成功: 查看执行结果:

hadoop-2.6.0伪分布运行WordCount

hadoop-2.6.0伪分布运行WordCount 1.启动Hadoop:  2.创建file 文件夹:  这个是建在本地硬盘上的: 查看创建的 file 文件: 进入该目录,创建两个 txt 文件: 结果如下: 3.在HDFS上创建输入文件夹目录 input : 把本地硬盘上创建的文件传进input 里面: 查看结果: 4.Hadoop自带的运行 wordcount 例子的 jar 包: 5.开始运行 wordcount: 过程: 查看运行结果: 附完整运行过程: 附代码: import j

windows下使用Eclipse编译运行MapReduce程序 Hadoop2.6.0/Ubuntu(二)

在上篇文章中eclipse已经能访问HDFS目录,但并不能进行Mapreduce编程,在这里小编将常见错误和处理办法进行总结,希望对大家有所帮助 错误1:ERROR [main] util.Shell (Shell.java:getWinUtilsPath(303)) - Failed to locate the winutils binary in the hadoop binary path java.io.IOException: Could not locate executable n