对于MapReduce: Simplified Data Processing on Large Clusters 的理解

2023-12-25 09:30

本文主要是介绍对于MapReduce: Simplified Data Processing on Large Clusters 的理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MapReduce: Simplified Data Processing on Large Clusters这个论文原版的没看,找了几个网上流传的翻译稿,认真看了一遍。因为内容主要为大数据方面,目前自己还没直接接触到这方面的内容,先记录一下收获,不然用到的时候都忘光了(见笑了。。)

先记录一下翻译比较好的文章,我自己看着逻辑上没啥大毛病的翻译稿(个人水平有限,别吐槽,见谅。。。):

第一个是csdn的:https://blog.csdn.net/shijinupc/article/details/7522446

第二个也是csdn的:https://blog.csdn.net/qq_27639777/article/details/99541730

实际上这个图就可以帮助我们更好地理解整个系统的工作原理了。但是整篇论文又从多个角度,用文字详细描述了MapReduce模型的具体原理和执行过程,可以说非常非常优秀!最起码我这个不懂大数据的人,也能大概看懂一点。

主要包括变成模型的介绍、模型的实现原理、模型优化措施、模型的性能测试案例以及其他的相关介绍,论文最后还给出了词频统计的代码。

一、大概介绍

MapReduce模型主要是为了解决大数据计算过程中在有限的时间内进行超大数据量以及分布式计算中并行、分发、处理实效等等问题而建立的。目的是为了让用户可以轻易地并行化大规模计算,并且具备一定的容错机制。

二、实现原理

实现原理可以从Fingure1中的1、2、3...等步骤看出一点来,大体描述一下的话,我是这么理解的:

1、分片。谁分?库来分。怎么分?用户选参数,其他的程序搞定。分完了就安排给手下的设备。

2、选老大。设备中有一个被选中了!成了master,它给其他小弟分工作。工作分两种map和reduce,有两组小弟分别去做。map那组小弟读取给他的分片内容,按照用户定义的函数生成临时键值结果,结果太重要了,需要定期写入本地磁盘。

3、汇报工作。小弟都由老大调度,还得给老大汇报工作。老大不信任小弟,需要map把工作成果放在那里都告诉他(缓存在本地磁盘上的位置)。

4、reduce那组需要在map基础上干活,当然它也听老大的,老大告诉它:map那组兄弟把货都放在“码头”了,你去取一下,然后回去干活。

5、reduce干活干净利索,它读取了所有的键值对,相同键的值就组合一下,再排个序。然后就把整理好的货给到用户,用户通过reduce函数处理一下,把结果写入最终输出文件。

6、最后就返回到用户代码了。一切以用户为核心,从用户那来,到用户那去。

除了原理,还有点其他内容:

1、master是老大,必须监控小弟工作状态,以及他们工作成果放在那里;

2、小弟挂了怎么办?没事,老大有他们工作成果的位置,另找兄弟,接着挂掉的干;

3、老大挂了怎么办?谷歌说了,几率不大,目前的实现上是这样的:真挂了就找找原因,从零开始。

接下来,还说了三点:

1、本地读取数据方面降低了网络带宽消耗;

2、任务颗粒大小有限制,R(reduce任务)是用户选择的,控制M(map)是常用手段,一般把M控制在16 MB到64 MB的输入数据大小范围内;

3、快完成任务的时候,把最后几个任务备份到其他兄弟那里同时搞,谁先搞完都算这个任务搞完了(承担最后重任的兄弟心理压力太大了,怕他心理不健康)。

三、优化模型的措施

这部分就说了一下怎么优化MapReduce模型的,一共说了9个措施。这9个措施,可能以后自己也用得到,简单概况一下:

1、reduce来分配内容到输出文件的时候,可以指定一下分区函数,跟Python的sorted()有点像;

2、刚才说的reduce的排序,可以理解成强迫症,但是很有用,默认按照递增来排序;

3、用户可以通过combiner函数,在传递给reduce之前先进行一下键值合并,这个函数可以由用户指定;

4、MapReduce库支持以多种不同格式读取输入数据;

5、没看懂;(猜测:有些人想利用一下map和reduce操作的产生的临时文件。大佬说:反正俺们就输出一个,一般先写到临时文件,全部写完就重命名了。你们想让俺多给你们几个副本,没门。最后还加了一句说,实际这个限制没成为问题,不晓得是不是还没人这么要求。)

6、你要是总犯一个错误,大佬们提供了一种模式,总犯一个错误,代码记住了,后期你再犯错直接跳过;

7、你要是在没有分布式条件的情况下想调试代码,大佬们开发了一套可选的MapReduce库;

8、master老大那里有个状态页,上面可以显示计算进度、状态、具体输入输出字节等等数据,用户可以据此诊断代码bug;

9、MapReduce库有个计数工具,用户可以用。

四、性能测试

这块就看看图知道一下结果就阔以了,需要对比的时候可以找原文看配置和过程。

五、大佬的经验和其他工作

大佬们做了很多工作,发文当时最重要的MapReduce用途是完全重写了谷歌的线上索引系统。还有其他的一些信息,请参照原文喽。

最后:

以上内容是个人理解,不到位的地方请忽略掉。

感谢谷歌大佬们的付出,也感谢各位翻译大佬们的辛苦工作,敬礼!

这篇关于对于MapReduce: Simplified Data Processing on Large Clusters 的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

HTML5 data-*自定义数据属性的示例代码

《HTML5data-*自定义数据属性的示例代码》HTML5的自定义数据属性(data-*)提供了一种标准化的方法在HTML元素上存储额外信息,可以通过JavaScript访问、修改和在CSS中使用... 目录引言基本概念使用自定义数据属性1. 在 html 中定义2. 通过 JavaScript 访问3.

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝