MapReduce计算流程

news/2024/5/3 12:06:57/文章来源:https://www.cnblogs.com/xiaoxiao-/p/16630431.html

MapReduce的计算流程

1.1 原始数据File

The books chronicle the adventures of the adolescent wizard Harry Potter and his best friends Ron Weasley and Hermione Granger, all of whom are students at Hogwarts School of Witchcraft and Wizardry. 

1T数据被切分成块存放在HDFS上,每一个块有128M大小

1.2 数据块Block

block块是hdfs上数据存储的一个单元,同一个文件中块的大小都是相同的

因为数据存储到HDFS上不可变,所以有可能块的数量和集群的计算能力不匹配

我们需要一个动态调整本次参与计算节点数量的一个单位

我们可以动态的改变这个单位–-->参与的节点

1.3 切片Split

目的:动态地控制计算单元的数量

切片是一个逻辑概念

在不改变现在数据存储的情况下,可以控制参与计算的节点数目

通过切片大小可以达到控制计算节点数量的目的

有多少个切片就会执行多少个Map任务

一般切片大小为Block的整数倍(2 1/2)

防止多余创建和很多的数据连接

如果Split大小 > Block大小 ,计算节点少了

如果Split大小 < Block大小 ,计算节点多了

默认情况下,Split切片的大小等于Block的大小 ,默认128M,如果读取到最后一个block块的时候,与前一个blokc块组合起来的大小小于128M*1.1的话,他们结合生一个split切片,生成一个map任务

一个切片对应一个MapTask

1.4 MapTask

map默认从所属切片读取数据,每次读取一行(默认读取器)到内存中(map种的逻辑作用在每一行上)

我们可以根据自己书写的分词逻辑(空格,逗号等分隔),计算每个单词出现的次数(wordcount)

这时会产生(Map<String,Integer>)临时数据,存放到内存中

the books chronicle the adventures of the adolescent wizard Harry Potter and his best friends Ron Weasley and Hermione Granger, all of whom are students at Hogwarts School of Witchcraft and Wizardry

the 1
books 1
chronicle 1
the 1
adventures 1
of 1
...
Wizardry 1

但是内存的大小是有限的,如果每个任务随机的去占用内存,会导致内存不可控。多个任务同时执行有可能内存溢出(OOM)

如果把数据都直接放到硬盘,效率太低

所以想个方案,内存和硬盘结合,我们要做的就是在OOM和效率低之间提供一个有效方案,可以先往内存中写入一部分数据,然后写出到硬盘

1.5 环形缓冲区(KV-Buffer)

可以循环利用这块内存区域,减少数据溢写时map的停止时间

每一个Map可以独享的一个内存区域

在内存中构建一个环形数据缓冲区(kvBuffer),默认大小为100M

设置缓冲区的阈值为80%(设置阈值的目的是为了同时写入和写出),当缓冲区的数据达到80M开始向外溢写到硬盘

溢写的时候还有20M的空间可以被使用效率并不会被减缓

而且将数据循环写到硬盘,不用担心OOM问题

说完这个先说溢写,合并,拉取(分析出问题得到结论),再说中间的分区排序

1.6 分区Partition(环形缓冲区做的)

根据Key直接计算出对应的Reduce

分区的数量和Reduce的数量是相等的

hash(key) % partation(reduce的数量) = num

默认分区的算法是Hash然后取余

Object的hashCode()—equals()

如果两个对象equals,那么两个对象的hashcode一定相等

如果两个对象的hashcode相等,但是对象不一定equlas

1.7 排序Sort(环形缓冲区做的,快速排序,对前面分区后的编号进行排序,使得相同编号的在一起)

对要溢写的数据进行排序(QuickSort)

按照先Partation后Key的顺序排序–>相同分区在一起,相同Key的在一起

我们将来溢写出的小文件也都是有序的

1.8 溢写Spill

将内存中的数据循环写到硬盘,不用担心OOM问题

每次会产生一个80M的文件

如果本次Map产生的数据较多,可能会溢写多个文件

1.9 合并Merge

因为溢写会产生很多有序(分区 key)的小文件,而且小文件的数目不确定

后面向reduce传递数据带来很大的问题

所以将小文件合并成一个大文件,将来拉取的数据直接从大文件拉取即可

合并小文件的时候同样进行排序(归并 排序),最终产生一个有序的大文件

1.10 组合器Combiner(目的是减少reduce拉取数据量,加快mapreduce的执行效率)

a. 集群的带宽限制了mapreduce作业的数量,因此应该尽量避免map和reduce任务之间的数据传输,hadoop允许用户对map的输出数据进行处理,用户可自定义combiner函数(如同map函数和reduce函数一般),其逻辑一般和reduce函数一样,combiner的输入是map的输出,combiner的输出作为reduce的输入,很多情况下可以i直接将reduce函数作为conbiner函数来试用(job.setCombinerClass(FlowCountReducer.class))。

b. combiner属于优化方案,所以无法确定combiner函数会调用多少次,可以在环形缓存区溢出文件时调用combiner函数,也可以在溢出的小文件合并成大文件时调用combiner,但是要保证不管调用多少次,combiner函数都不影响最终的结果,所以不是所有处理逻辑都可以i使用combiner组件,有些逻辑如果试用了conbiner函数会改变最后reduce的输出结果(如求几个数的平均值,就不能先用conbiner求一次各个map输出结果的平均值,再求这些平均值的平均值,那样会导致结果的错误)。

c. combiner的意义就是对每一个maptask的输出进行局部汇总,以减小网络传输量:

原先传给reduce的数据时a1 a1 a1 a1 a1

第一次combiner组合后变成a(1,1,1,1,1)

第二次combiner后传给reduce的数据变为a(5,5,6,7,23,...)

1.11 拉取Fetch

我们需要将Map的临时结果拉取到Reduce节点

第一种方式:两两合并
第二种方式:相同的进一个reduce
第三种对第二种优化,排序
第四种对第三种优化:如果一个reduce处理两种key,而key分布一个首一个尾,解决不连续的问题,给个编号,这个编号怎么算呢,`回到分区,排序`

原则(用统计姓氏的例子画图理解)

相同的Key必须拉取到同一个Reduce节点

但是一个Reduce节点可以有多个Key

未排序前拉取数据的时候必须对Map产生的最终的合并文件做全序遍历

而且每一个reduce都要做一个全序遍历

如果map产生的大文件是有序的,每一个reduce只需要从文件中读取自己所需的即可

1.12 合并Merge

因为reduce拉取的时候,会从多个map拉取数据

那么每个map都会产生一个小文件,这些小文件(文件与文件之间无序,文件内部有序)

为了方便计算(没必要读取N个小文件),需要合并文件

归并算法合并成2个(qishishilia)

相同的key都在一起

1.13 归并Reduce

将文件中的数据读取到内存中

一次性将相同的key全部读取到内存中

直接将相同的key得到结果–>最终结果

1.14 写出Output

每个reduce将自己计算的最终结果都会存放到HDFS上

 

画图理解

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_2784.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP协议

TCP协议 TCP(Transmission Control Protocol)协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。 TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。…

MySQL九:MVCC能否解决幻读问题

转载~ 幻读【前后多次读取,数据总量不一致】同一个事务里面连续执行两次同样的sql语句,可能导致不同结果的问题,第二次sql语句可能会返回之前不存在的行。事务A执行多次读取操作过程中,由于在事务提交之前,事务B(insert/delete/update)写入了一些符合事务A的查询条件的记…

C - Candles

题目链接: C - Candles (atcoder.jp) 题目大意: 给你n个蜡烛的坐标,你想点燃其中k个蜡烛,一开始你在坐标0,每次向左或者向右可以移动一格,问点燃k个蜡烛至少需要移动多少步。 分析: 最优的移动的路线可以看作是一个‘U’型再加上一个线段。 以第一个样例为例: 如图所示…

手机PC安装油猴

一、移动端使用油猴脚本移动端可以不使用油猴插件,就可直接安装脚本(需要浏览器支持),这样天然支持油猴脚本的移动浏览器还是很多,比如:书签地球、X浏览去、M浏览器等,但是各个浏览器的支持情况不一样,下面我以**【书签地球】**为例,展示安装使用,此浏览器经过测试对…

DTSE Tech Talk | 云原生架构下的数字身份治理实践

摘要:由华为技术大咖VS派拉软件CTO为大家详解云原生架构下的身份管理平台,构建云安全数字身份入口。 本文分享自华为云社区《DTSE Tech Talk | 第4期:云原生架构下的数字身份治理实践》,作者: 华为云社区精选。 DTSE Tech Talk是华为云开发者联盟推出的技术公开课,解读云…

【技术流吃瓜】python可视化大屏舆情分析“张天爱“事件网友评论

python可视化大屏分析,舆情分析,张天爱事件目录一、事件背景二、微热点分析二、自开发Python舆情分析2.1 Python爬虫2.2 可视化大屏2.2.1 大标题2.2.2 词云图2.2.3 条形图2.2.4 饼图(玫瑰图)2.2.5 地图三、演示视频 一、事件背景 大家好,我是马哥python说。 演员张天爱于2…

2022-08-26 第六小组 高佳誉 学习笔记

前情提要(博主在复习前端知识,所以近几天没有更新博客。相关前端内容可见博主其他随笔) JQurey 重点事件 与JS的区别 选择器思维导图知识点 1. 定义 JQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(框架)于2006年1月由John Resi…

Shopify Spark主题模板配置修改

对于那些正在启动业务的shopify卖家来说,Spark主题是很好的选择,它跨越了你的愿景和市场之间的差距,将美感和必要性结合在一起,这样你就可以用最小的触角将事情进行下去。通过最少的设置,我们设计了一个主题,以帮助你迅速和毫不费力地开店,同时仍然是一个具有惊人风格的…

NC50940 Running Median

For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After each odd-indexed value is read, output the median (middle value) of the elements received so far.题目原题地址:Running Median 题目编号:NC50940 题目类型:对…

项目工期延后有哪些补救措施?

大部分项目经理都面临过项目延期的情况,特别是在软件开发领域,项目延期情况尤为严重。项目管理者的真正挑战,不是发现问题和记录问题,而是预见问题、控制问题和解决问题。 因此当项目出现了延期状况时,我们需要思考有效的”拯救“之策,尽最大可能将未被终止的项目进行调整…

用于知识图嵌入的多尺度动态卷积网络

原文 Multi-Scale Dynamic Convolutional Network for Knowledge Graph Embedding 出版IEEE Transactions on Knowledge and Data Engineering Volume: 34 Issue: 5 01 May 2022申明 版权归原文作者及出版单位所有,如有侵权请联系删除 摘要 知识图是具有不完全或部分信息的大型…

全同态加密-丁津泰:学习

本文学习丁老师写的同态加密的文章,做些笔记。引言同态加密适用于云计算。 因为任意计算都可以由加法和乘法构成,全同态意味着计算函数\(f\)可以是任意计算操作(任意次加法和乘法)。 同态加密,起源于“隐私同态”的概念,但并未给出具体实现;后续提出一些部分同态性的方案…

打了一场模拟赛的心态,总结

今天打了一场模拟赛总结一下: 题目比较简单(我后面一个题目100一个90都是暴力的功/dogen) Frist problem: 总结:一道伪装成5⭐的打卡题目 用时:2~3min 思路:每输入一个字符串判断最后一个字符就可以得知是哪国的人(因为这几个国结尾字母各不相同) Second problem: 总…

AMBA AHB总结

AMBA AHB(高级高性能总线)介绍 一、AHB简介 AHB是为提出高性能可综合设计的要求而产生的新一代AMBA总线。它是一种支持多总线主机和提供高带宽操作的高性能总线。 AMBA AHB实现了高性能,高时钟频率系统的以下特征要求: 突发传输、分块处理、单周期总线主机移交,单时钟沿操…

[XMAN2018排位赛]AutoKey

1、得到USB流量,首先了解AutoKey是什么 自动秘钥密码(Autokey)_不会学习的小菜鸡的博客-CSDN博客_autokey密码 2、安装UsbKeyboardDataHacker.py 工具 GitHub - WangYihang/UsbKeyboardDataHacker: USB键盘流量包取证工具 , 用于恢复用户的击键信息 3、用UsbKeyboardDataHacke…

Promise的基本用法

一.定义: Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。 二.特点: (1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种…

devexpress 22.1.3 PivotGrid 结合.net6 MVC

效果图 主页面zyjkDetection.cshtml@using Health.Model @using Health.Repository; @*For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 *@ @inject HealthDataContext db @{ViewData["Title"] = …

手绘丛林冒险游戏推荐

mac上的一款手绘丛林冒险游戏《Gibbon: Beyond the Trees》推荐给大家,跟着一只迷路的长臂猿展开冒险旅程,进入未知的危险之地。在解放模式下竞速奔向自由,或者进入长达一小时的叙事故事中,体会世界各地野生动物奋斗求生的真实故事。 软件下载地址 《Gibbon: Beyond the Tr…

springboot实现文件下载(打jar包可下载,可解决下载文件损坏)

前端代码:downloadTemplate(){let url = `${window._CONFIG[domianURL]}/invoice/bmsBillRiskverification/downloadTemplate`;window.location.href = url;}后端代码:/*** @param response* @功能描述 下载文件:*/@RequestMapping("/downloadTemplate")public voi…

python 读取json文件

一个jason文件实例————fcc.json { "organization": "freeCodeCamp", "website": "https://www.freecodecamp.org/", "formed": 2014, "founder": "Quincy Larson", "certifications": [ …