对于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

相关文章

深入理解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++强制类型转换的原因📝

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

分布式系统的个人理解小结

分布式系统:分的微小服务,以小而独立的业务为单位,形成子系统。 然后分布式系统中需要有统一的调用,形成大的聚合服务。 同时,微服务群,需要有交流(通讯,注册中心,同步,异步),有管理(监控,调度)。 对外服务,需要有控制的对外开发,安全网关。

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字