/**
* @Author: dreamer Q
* @Date: 2019/11/4 22:26
* @Version 1.0
* @Discription 使用MapReduce 开发 WordCount应用程序
*/
public class WordCount2App{ /**
* Map: 读取输入的文件
* Mapper里面四个泛型的含义
* 输入的数据类型:
* LongWritable:表示偏移量,由于Long要在服务器之间传输,LongWritable是hadoop封装的可序列的类型
* Text:文本类型
* 输出的数据类型:
* Text:文本类型
* LongWritable:表示统计的数量,同Long一样,要在服务器之间传输,IntWritable是hadoop封装的可序列化的类型
*/
public static class WCMapper extends Mapper<LongWritable,Text,Text,LongWritable>{ //mapreduce框架每读一行数据就调用一次该方法
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//具体的业务逻辑就卸载这个方法中,而且我们业务要处理的数据已经被框架传递进来,在方法的参数中key-value
//key 是这一行数据的起始偏移量,value 是这一行的文本内容 //将这一行的内容换成String类型
String line = value.toString(); //对这一行的文本按特定分隔符切分
String[] words = StringUtils.split(line, " "); //遍历这个单词数据输出为key-value的形式 k:单词 v :1
for (String word : words) {
context.write(new Text(word), new LongWritable(1));
} }
} /**
* Reduce:归并操作
*/
public static class WCReducer extends Reducer<Text,LongWritable,Text,LongWritable>{ //框架在map处理完成之后,将所有kv对缓存起来,进行分组,然后传递一个组<key,values{}> 调用一次reduce方法
//<hello,{1,1,1,1,1,....}>
@Override
protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
long count=0; for (LongWritable value : values) {
count +=value.get();
} //输出这一个单词的统计结果
context.write(key, new LongWritable(count));
}
} /**
* 用来描述一个特定的作业
* 比如:改作业使用那个类作为逻辑处理中的map,哪个作为reduce
* 还可以指定该作业要处理的数据所在的路径
* 还可以指定该作业输出的结果的结果放到哪个路径
* @param args
*/
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException { // Job job = new Job(); 已过时
Configuration conf =new Configuration(); Job job = Job.getInstance(conf); //设置整个job所有的那些类所用的jar包的位置-因为是分布式
job.setJarByClass(WordCount2App.class); //本job使用的mapper和reducer的类
job.setMapperClass(WCMapper.class);
job.setReducerClass(WCReducer.class); //指定reduce 的输出 key 和 value 类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class); //指定mapper的输出数据 key 和 value 类型 //指定要输入的数据存放的路径--输入的数据路径
FileInputFormat.setInputPaths(job, new Path("/wc/srcdata")); //指定处理结果的输出数据存放路径--输出的数据路径
FileOutputFormat.setOutputPath(job, new Path("/wc/output")); //将job提交给集群运行
job.waitForCompletion(true); } }

MapReduce-WordCountDemo的更多相关文章

  1. MapReduce 单词统计案例编程

    MapReduce 单词统计案例编程 一.在Linux环境安装Eclipse软件 1.   解压tar包 下载安装包eclipse-jee-kepler-SR1-linux-gtk-x86_64.ta ...

  2. 2_分布式计算框架MapReduce

    一.mr介绍 1.MapReduce设计理念是移动计算而不是移动数据,就是把分析计算的程序,分别拷贝一份到不同的机器上,而不是移动数据. 2.计算框架有很多,不是谁替换谁的问题,是谁更适合的问题.mr ...

  3. Mapreduce的文件和hbase共同输入

    Mapreduce的文件和hbase共同输入 package duogemap;   import java.io.IOException;   import org.apache.hadoop.co ...

  4. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  5. mapreduce中一个map多个输入路径

    package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...

  6. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  7. [Hadoop in Action] 第5章 高阶MapReduce

    链接多个MapReduce作业 执行多个数据集的联结 生成Bloom filter   1.链接MapReduce作业   [顺序链接MapReduce作业]   mapreduce-1 | mapr ...

  8. MapReduce

    2016-12-21  16:53:49 mapred-default.xml mapreduce.input.fileinputformat.split.minsize 0 The minimum ...

  9. 使用mapreduce计算环比的实例

    最近做了一个小的mapreduce程序,主要目的是计算环比值最高的前5名,本来打算使用spark计算,可是本人目前spark还只是简单看了下,因此就先改用mapreduce计算了,今天和大家分享下这个 ...

  10. MapReduce剖析笔记之八: Map输出数据的处理类MapOutputBuffer分析

    在上一节我们分析了Child子进程启动,处理Map.Reduce任务的主要过程,但对于一些细节没有分析,这一节主要对MapOutputBuffer这个关键类进行分析. MapOutputBuffer顾 ...

随机推荐

  1. Kubernetes部署DNS

    前言 阅读地址 http://thoreauz.com/2017/04/16/docker/Kubernetes%E9%83%A8%E7%BD%B2DNS%E5%92%8CDashboard/ Kub ...

  2. Ansible笔记(1)---基本概念

    一.ansible的作用以及工作结构 1.1.ansible简介: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func ...

  3. Oracle Internals Notes Redo Write Triggers

    There are four conditions that cause LGWR to perform a redo write. When LGWR is idle, it sleeps on a ...

  4. [洛谷P4172] WC2006 水管局长

    问题描述 SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一条从A至B的水 ...

  5. namedtuple的简单使用

    """ factory function for creating tuple subclasses with named fields namedtuple 是tupl ...

  6. MainRun

    package Testlink; import java.io.IOException; public class MainRun { public static void main(String[ ...

  7. 使用 Visual Studio 调试器附加到运行的进程

    为什么调试附加进程? Visual Studio 调试器可以附加到在 Visual Studio 外运行的进程. 可以使用此附加功能执行以下操作: 调试并非在 Visual Studio 中创建的应用 ...

  8. 编辑器直接word直接上传word里的图片

    tinymce是很优秀的一款富文本编辑器,可以去官网下载.https://www.tiny.cloud 这里分享的是它官网的一个收费插件powerpaste的旧版本源码,但也不影响功能使用. http ...

  9. 科匠中国深圳java面试笔试题

  10. Largest Point

    Largest Point Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...