【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

相关文章

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

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid