/**
* @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. P.W.N. CTF - Web - Login Sec

    题目 链接:https://ctftime.org/task/6934 题解 Login 1 题目给出了源码 var http = require('http'); const crypto = re ...

  2. 前端小姐姐学PHP之(一)

    作为一个前端不懂后台那是不对的,嘻嘻,来走一波... 一.安装 **我这里用的是phpStudy和phpStrom** 1.安装phpStudy 链接:https://pan.baidu.com/s/ ...

  3. 阿里云ECS无法通过SSL远程链接问题。

    自己配置的SSL,通过密码,公司的是通过密钥,结果也是一样, 环境:centos7.x 网络: 家里宽带 公司网络 省图书馆wifi 家里宽带,公司网络均可以链接上去, 但唯独省图书馆wifi链接失败 ...

  4. kafka集群安装及基本命令行使用

    集群安装 环境介绍 本次安装kafka集群利用的是自带的zooKeeper,其实最好是把kafka和zooKeeper部署在不同的节点上,这样更高可用. 三个节点: kafka1:192.168.56 ...

  5. CSS入门基础学习一

    一.CSS样式 1.什么是CSS: CSS是指层叠样式表(Cascading Style Sheels),CSS通常为CSS样式表或层叠样式表,主要用于设置HTML文本内容,以及版本面的布局等 2.H ...

  6. HTML中<input>和<textarea>的区别

    在HTML中有两种方式表达文本框 一个是<input>元素的单行文本框 一种是<textarea>的多行文本框. <input>元素: 1.一定要指定type的值为 ...

  7. python中用os.walk查找全部的子文件

    import os import shutil # 要遍历查找的文件所在的父文件夹 trajectory_filename =r"D:\mapping" # 要粘贴到的目标文件夹 ...

  8. Ubuntu查看端口使用情况,使用netstat命令:

    https://www.cnblogs.com/fly-book/p/9827128.html

  9. 测开之路七十七:性能测试蓝图之js

    //定义全局的editor = nullvar editor = null; //ace_editor的初始化函数function ace_editor() { var editor = ace.ed ...

  10. python web自动化测试框架搭建(功能&接口)——通用模块

    1.通用模块: config.conf: 公共配置文件,配置报告.日志.截图路径,以及邮件相关配置 [report] reportpath = E:\workspace\WebAutomation\s ...