Mapperreduce的wordCount原理

wordcount原理:

1.mapper(Object key,Object value ,Context contex)阶段

2.从数据源读取一行数据传递给mapper函数的value

3.处理数据并将处理结果输出到reduce中去

String line = value.toString();

String[] words = line.split(" ");

context.write(word,1)

4.reduce(Object key ,List<value> values ,Context context)阶段

遍历values累加技术结果,并将数据输出

context.write(word,1)

代码示例:

Mapper类:

package com.hadoop.mr;

import java.io.IOException;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
/**
 * Mapper <Long, String, String, Long>
 * Mapper<LongWritable, Text, Text, LongWritable>//hadoop对上边的数据类型进行了封装
 *  LongWritable(Long):偏移量
 *  Text(String):输入数据的数据类型
 *  Text(String):输出数据的key的数据类型
 *  LongWritable(Long):输出数据的key的数据类型
 * @author shiwen
 */
public class WordCountMapper extends Mapper<LongWritable, Text, Text, LongWritable>{
    @Override
    protected void map(LongWritable key, Text value,
            Mapper<LongWritable, Text, Text, LongWritable>.Context context)
            throws IOException, InterruptedException {
        //1.读取一行
        String line = value.toString();
        //2.分割单词
        String[] words = line.split(" ");
        //3.统计单词
        for(String word : words){
            //4.输出统计
            context.write(new Text(word), new LongWritable(1));
        }
    }
}

reduce类

package com.hadoop.mr;

import java.io.IOException;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class WordCountReduce extends Reducer<Text, LongWritable, Text, LongWritable>{
    @Override
    protected void reduce(Text key, Iterable<LongWritable> values,
            Reducer<Text, LongWritable, Text, LongWritable>.Context context)
            throws IOException, InterruptedException {

        long count = 0;
        //1.遍历vlues统计数据
        for(LongWritable value : values){
            count += value.get();
        }
        //输出统计
        context.write(key, new LongWritable(count));

    }

}

运行类:

package com.hadoop.mr;

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.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider.Text;

public class WordCountRunner {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        //1.创建配置对象
        Configuration config = new Configuration();
        //2.Job对象
        Job job = new Job(config);

        //3.设置mapperreduce所在的jar包
        job.setJarByClass(WordCountRunner.class);

        //4.设置mapper的类
        job.setMapOutputKeyClass(WordCountMapper.class);
        //5.设置reduce的类
        job.setReducerClass(WordCountReduce.class);

        //6.设置reduce输入的key的数据类型
        job.setOutputKeyClass(Text.class);
        //7.设置reduce输出的value的数据类型
        job.setOutputValueClass(LongWritable.class);

        //8.设置输入的文件位置
        FileInputFormat.setInputPaths(job, new Path("hdfs://192.168.1.10:9000/input"));
        //9.设置输出的文件位置
        FileOutputFormat.setOutputPath(job, new Path("hdfs://192.168.1.10:9000/input"));

        //10.将任务提交给集群
        job.waitForCompletion(true);

    }

}
时间: 2024-12-12 22:16:58

Mapperreduce的wordCount原理的相关文章

Hive实现WordCount详解

一.WordCount原理 初学MapReduce编程,WordCount作为入门经典,类似于初学编程时的Hello World.WordCount的逻辑就是给定一个/多个文本,统计出文本中每次单词/词出现的次数.网上找的一张MapReduce实现WordCount的图例,基本描述清楚了WordCount的内部处理逻辑.本文主要是从Hive使用的角度处理WordCount,就不赘述,之前的一篇博文有MapReduce实现WordCount的代码,可参考 https://www.cnblogs.c

Scala 深入浅出实战经典 第93讲:Akka第一个案例动手实战开发消息实体类

构建map,reduce之间通讯的消息实体类. 了解wordcount原理. DT大数据梦工厂微信公众账号:DT_Spark. DT大数据梦工厂的微信公众号是DT_Spark,每天都会有大数据实战视频发布,请您持续学习. 王家林DT大数据梦工厂scala的所有视频.PPT和代码在百度云盘的链接:http://pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-to=pcqq.group QQ群: DT大数据梦工厂① :4629

彻底解密WordCount运行原理(DT大数据梦工厂)

主要内容: 数据流动视角解密WordCount RDD依赖关系视角解密WordCount DAG与Lineage的思考 ==========数据流动视角============ 新建文件,里面输入 Hello Spark Hello Scala Hello Hadoop Hello Flink Spark is awesome 修改代码: package com.dt.spark.SparkApps.cores; import java.util.Arrays; import java.util

5.hadoop流原理、实例和新旧API下Wordcount详解

前四篇文章讲了Hadoop的配置和测试以及eclipse下的使用,有兴趣的可以先看下. 1.Hadoop流简介 用可执行文件作为Mapper和Reducer,接受的都是标准输入,输出的都是标准输出. 当一个可执行文件作为Mapper时,每一个Map任务会以一个独立的进程启动这个可执行文件,然后在Map任务运行时,会把输入切分成行提供给可 执行文件,并作为它的标准输入(stdin)内容.当可执行文件运行出结果时,Map从标准输出(stdout)中收集数据,并将其转化 为<key, value>对

Hadoop WordCount单词计数原理

计算文件中出现每个单词的频数 输入结果按照字母顺序进行排序 编写WordCount.java 包含Mapper类和Reducer类 编译WordCount.java javac -classpath 打包jar -cvf WordCount.jar classes/* 提交作业 hadoop jar WordCount.jar WordCount input output

Storm概念、原理详解及其应用(一)BaseStorm

本文借鉴官文,添加了一些解释和看法,其中有些理解,写的比较粗糙,有问题的地方希望大家指出.写这篇文章,是想把一些官文和资料中基础.重点拿出来,能总结出便于大家理解的话语.与大多数"wordcount"代码不同的是,并不会有如何运行第一storm代码等内容,只有在运行完代码后,发现需要明白:"知其然,并知其所以然". Storm是什么?为什么要用Storm?为什么不用Spark? 第一个问题,以下概念足以解释: Storm是基于数据流的实时处理系统,提供了大吞吐量的实

Hadoop之MapReduce工作原理

Hadoop由两部分组成,分别是分布式文件系统HDFS和分布式计算框架MapReduce.其中,分布式文件系统HDFS主要用于大规模数据的分布式存储,而MapReduce则构建在分布式文件系统上,对于存储在分布式文件系统的数据进行分布式计算. 1  MapReduce设计目标 HadoopMapReduce诞生于搜索领域,主要解决搜索引擎面临的海量数据处理扩展性差的问题.它的实现很大程度上借鉴了Google MapReduce的设计思想,包括简化编程接口.提高系统容错性等.总结HadoopMap

MapReduce调度与执行原理系列文章

转自:http://blog.csdn.net/jaytalent?viewmode=contents 一.MapReduce调度与执行原理之作业提交 二.MapReduce调度与执行原理之作业初始化 三.MapReduce调度与执行原理之任务调度 四.MapReduce调度与执行原理之任务调度(续) 前言:本文旨在理清在Hadoop中一个MapReduce作业(Job)在提交到框架后的整个生命周期过程,权作总结和日后参考,如有问题,请不吝赐教.本文不涉及Hadoop的架构设计,如有兴趣请参考相

数据挖掘系列(8)朴素贝叶斯分类算法原理与实践

隔了很久没有写数据挖掘系列的文章了,今天介绍一下朴素贝叶斯分类算法,讲一下基本原理,再以文本分类实践. 一个简单的例子 朴素贝叶斯算法是一个典型的统计学习方法,主要理论基础就是一个贝叶斯公式,贝叶斯公式的基本定义如下: 这个公式虽然看上去简单,但它却能总结历史,预知未来.公式的右边是总结历史,公式的左边是预知未来,如果把Y看出类别,X看出特征,P(Yk|X)就是在已知特征X的情况下求Yk类别的概率,而对P(Yk|X)的计算又全部转化到类别Yk的特征分布上来. 举个例子,大学的时候,某男生经常去图