【hadoop】 3001-mapreduce并发框架思想

2023-11-29 04:32

本文主要是介绍【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并发框架思想的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/431455

相关文章

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2