本文主要是介绍【hadoop】 3001-mapreduce并发框架思想,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简述:MapReduce是什么?
1、MapReduce工作机制
它可以将计算任务拆分成大量可以独立运行的子任务,接着并行运算,另外会有一个系统调度的架构负责 收集和 汇总每个子任务的分析结果。其中 包含映射算法与规约算法。
MapReduce的主体是两个函数Map()和Reduce(),Map负责清洗数据,Reduce负责数据分析并输出最终结果,而且这两个功能之间并非一对一的关系,可以根据具体业务选择匹配关系。
如图是MapReduce的内部计算步骤
2、Map函数
输入:键值关系的数据队列,键是每段内容开头的偏移量。
处理:从输入中抽取出自定义的关键字段。这个处理过程可以很简单,也可以很复杂。
输出:键值关系的数据队列,通常是保存在硬盘上,而不是HDFS中。因为这个数据集只是个中间过程,计算结束时需要被删除。
3、Reduce函数
输入:Map的输出结果经过MapReduce框架处理之后分发给Reduce函数,因为通常一个Reduce函数需要拿到完整的数据集之后才能开始分析。
处理:这一步的分析处理将是最为艰难和富有价值的环节。根据不同业务指标定义处理函数。
输出:输出自定义的格式文件,并且保存在HDFS上。
3、Combiner函数
输入: Map的输出结果未经过MapReduce框架处理之后直接传送 给Combiner函数。
处理:Combiner函数着手做 合并归类和 排序等处理,经过处理之后,数据集大大缩小。避免在shuffle阶段进行数据的Group和Partition。
输出:这时的输出结果才传送给MapReduce架构处理中心。
解决问题: 减少带宽传输压力!
一、基本概念 进程:同一数据在不同进程之间并发进行,并发执行可以加快整体速度
线程:可以解决同步和异步的问题,但不能增加处理的速度
二、普通JAVA程序统计文本数据
思路
读取每行数据,采用HashMap存放每个单词对应的个数
例如:
=>新建文本wordcount.txt
hello world
hello you
=>程序处理结果
<hello,2>
<world,1>
<you,1>
=>程序处理伪代码
v = get(k) ; if(v!=null){ v++;}; <k,v)
三、海量数据可以采用MapReduce并发执行,用于提高速度
1、分两步处理数据
Map: 不同进程之间并发执行
Reduce: 对Map的数据进行汇总
2、Mapreduce概述
2.1 Mapreduce是一种分布式计算模型,google提出,主要用于搜索领域,解决海量数据的计算问题
2.2 MR由两个阶段组成:Map和Reduce,用户只要实现map()和reduce()两个函数
2.3 Mapreduce原理
<k1,v1>---> Map --><k2,v2> ---> Group[K2,{v21,v22,v23},K1,{v11,v12,v13}], Partition--> Reduce--<k3,v3>
其中: Group为分组,Partition按照k进行排序
3、统一文本文件中每个单词出现的个数
需求内容:
新建一个文件命名wordcount.txt,其中的内容为
hello world
how are you
I am fine
thank you
hello tom
my name is shenfl
I am a new student this term
伪代码统计程序:
/**
* @param key : 偏移量
* @param value: 每一行数据
*/
map(key,value,context){
String[] vs = value.split(",");
for(String v:vs){
context.write(v,1)
}
}
/**
* @param key: 经过k分组后内容
*/
reduce(key,valueList,context){
int count = 0;
for(int i: valueList){
count += i;
}
context.write(key,count);
}
示例图方式模拟MR的map和reduce两个阶段,体现MR的并发框架的计算模型
这篇关于【hadoop】 3001-mapreduce并发框架思想的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!