MIT 6.824 Lab1 MapReduce实现思路_mitmapreduce实现csdn-程序员宅基地

技术标签: mapreduce  go  分布式  大数据  

原理描述:

        MapReduce的体系结构主要是Master和Worker,Master与Worker之间的通信通过RPC,Master管理着所有Worker,管理着所有的Map任务和Worker任务的进度,向每一个Worker分配Map任务和Reduce任务,并记录Map任务和Reduce任务是否顺利完成。

        Worker通过RPC向Master请求到Map任务后,首先从分布式存储系统中读取需要用Map函数处理的数据,然后执行Map函数,将Map函数的执行结果输出到本地文件系统,然后向Master报告自己的任务完成情况,进一步请求自己应该完成的新的Map任务。

        当Worker完成了所有的Map任务后,Worker就会向Master请求Reduce任务,与Map任务不同的是,Worker通过网络,向所有完成Map任务的Worker发送读取对应的中间文件的请求,在读取到中间文件后,Worker首先将中间文件处理为适合输入到Reduce函数的形式,然后用Reduce函数处理中间文件,并且将执行结果输出到分布式文件系统中,并向Master报告自己的任务完成情况,进一步请求自己应该完成的新的Reduce任务,当所有Reduce任务完成之后,结束本次MapReduce任务。

        Master接收客户端发送给Master的MapReduce任务,然后初始化MapReduce的任务配置。Master管理着所有的Worker,当Worker请求MapReduce任务时,Master向Worker分配相应的任务,并且记录任务的完成状态,并且在等待固定时间之后,检查分配给Worker的任务是否完成,如果没有完成,将该任务重新放入任务池,以便分配给其他请求任务的worker。当所有的Map任务和Reduce任务都完成后,结束本次的MapReduce任务。

实现思路:

        根据原理,可以先从Worker入手,使用两个死循环,一个循环不断请求并且执行Map任务,一个循环不断请求并执行Reduce任务。第一个循环可以在当没有请求到新的Map任务时跳出循环。第二个循环可以在当没有请求到新的Reduce任务时跳出循环。然后在Master中,通过接收Worker发送过来的对应的RPC,根据当前整个任务的完成状态,确定是否向Worker回复其请求的任务,如果不回复请求的任务,应该回复任务已完成还是让该Worker等待其他的Worker完成任务。

避坑指南:

        在Worker存储文件时,注意使用ioutil.TempFile创建临时文件,并使用os.Rename 以原子方式重命名。因为这样当Worker由于某些原因Crash时,该Worker未完成的工作不会影响到下一个Worker完成该任务。Worker存储中间数据时应使用JSON格式方便传输

        在Master中应该记录Map任务和Reduce任务的完成状态,并且在Server中定期检查分配给Worker的任务是否在规定时间内完成。如果未完成应该将该任务分配给新的Worker。

        在Map函数中,执行os.Exit(1)就意味着程序从操作系统中退出,我们只能通过插入断点跟踪寄存器状态,无法通过多线程或者异常处理捕获它,正确的方式应该在Master中检查该任务是否完成,重点不应该放在Worker中处理。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_52010229/article/details/138080453

智能推荐

css中hover属性的使用技巧_css hover的用法-程序员宅基地

文章浏览阅读2.3w次,点赞15次,收藏63次。hover属性用不同的书写方式,来改变不同关系的元素样式。元素:hover 表示聚焦后改变自己元素:hover 元素 表示聚焦后改变其子元素元素:hover + 元素 表示聚焦后改变其指定的“亲兄弟”(条件是该兄弟元素与其相邻)元素元素:hover ~ 元素 表示聚焦后改变其指定的兄弟元素,两个元素相不相邻都行。示例:.first:hover {color: white;}/* 聚焦我改变自己 */.three:hover .three-son {font-size: 20px._css hover的用法

coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习_pca反向压缩-程序员宅基地

文章浏览阅读6k次,点赞3次,收藏15次。coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习1聚类算法clutering1聚类算法简介2K-means21kmeans的目标函数22随机初始化23选择类别数3考试quiz维数约减 dimensionality reduction1数据压缩2数据可视化3维度约简-主成分分析法PCA1 PCA_pca反向压缩

vim插件安装及常用技巧_bxbx.vim-程序员宅基地

文章浏览阅读5.2k次。一、插件安装Vundle是vim的一个插件管理器, 同时它本身也是vim的一个插件。插件管理器用于方便、快速的安装、删除、Vim更新插件。mkdir -p ~/.vim/bundlegit clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim管理器安装完成后,vim ~/.vimrc命令创建.vimrc文件syntax on" tab宽度和缩进同样设置为4set tabstop=4set softta_bxbx.vim

java.lang.ClassNotFoundException:如何解决-程序员宅基地

文章浏览阅读7.2w次,点赞10次,收藏41次。本文适用于当前面临java.lang.ClassNotFoundException挑战的Java初学者。 它将为您提供此常见Java异常的概述,这是一个示例Java程序,可支持您的学习过程和解决策略。 如果您对与更高级的类加载器相关的问题感兴趣,我建议您复习有关java.lang.NoClassDefFoundError的文章系列,因为这些Java异常密切相关。 java.lang..._java.lang.classnotfoundexception:

串口通信数据帧_一帧数据-程序员宅基地

文章浏览阅读1.2k次,点赞9次,收藏17次。不同的设备间建立连接往往需要通信,而串口通信是十分常用的一种。UART串口通信需要两根线来实现,一根用于串口发送,另外一更用于串口接收。UART串口发送或者接收过程中一帧数据包括1位起始位、8位数据位、1位停止位,为了提高数据的可靠性可以在停止位前加上1位奇偶校验位。串口通信虽然十分简单,但是在不同设备间发送的数据往往不止1个字节,往往需要多个字节组成的数据包。当我们按照数据包发送时我们需要考虑到以及,因此我们可以采用定义数据帧的方式解决上述两个问题。_一帧数据

代码编辑快捷键使用说明_改代码快捷键-程序员宅基地

文章浏览阅读1.4k次。1、Ctrl+←或→ :跳过(左边或右边)一个光标相邻的单词或词组(标点符号相当于一个单词)。点击前光标位置:点击后光标位置:2、Shift+←或→:选中(左边或右边)一个光标相邻的字符。点击前显示:点击后显示: 3、Shift+Ctrl+←或→:选中(左边或右边)一个光标相邻的单词或词组(标点符号相当于一个单词)。点击前显示:点击后显示:4、Home/End:光标定位到当前行的行头/行尾。点击前:点击Home后:点击End后:5、Ctrl+Home/End:从光标所在位置直接回到当前文件开头/结尾。点击前_改代码快捷键

随便推点

问题解决:shared_ptr Assertion px != 0 failed 及debug经验分享_typename boost::detail::sp_dereference<t>::type bo-程序员宅基地

文章浏览阅读6.8k次,点赞11次,收藏18次。问题解决:shared_ptr Assertion px != 0 failed及debug经验分享问题详细描述:/usr/include/boost/smart_ptr/shared_ptr.hpp:646: typename boost::detail::sp_dereference::type boost::shared_ptr::operator*() const [with T = pcl::PointCloudpcl::pointxyz; typename boost::detail::sp_typename boost::detail::sp_dereference::type boost::shared_ptr::operat

看不见的“网” ,一文读懂阿里云基础设施网络_阿里云网络基线理解-程序员宅基地

文章浏览阅读553次。编者按:在这个万物智联的时代,无论是在线网络购物,还是网络强国、数字中国建设,都离不开一张“看不见的网”——基础设施网络。2009年,首届双11每秒交易订单创建峰值400;2021年,双11每秒交易订单创建峰值58.3万,12年交易数字量猛增的背后,是阿里云在庞大分布式系统上计算和IO能力的飞跃,更离不开阿里云基础设施底层网络技术的支撑。图|阿里云全球基础设施网络系统作为阿里云基础设施的重要组成部分,阿里云基础设施网络团队负责整个阿里云全球基础设施网络,包括大规模高性能数据中心网络,全球数据中心互联_阿里云网络基线理解

TCP/UDP常见端口参考_怎么查看端口映射的是tcp还是udp-程序员宅基地

文章浏览阅读1.7k次。端口列表一览端口号码 / 层 名称 注释 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举连接了的端口的系统状态 13 daytime 给请求主机发送日期和时间 17 qotd 给连接了的主机发送每日格言 18 msp 消息发送协议 19 _怎么查看端口映射的是tcp还是udp

android JSBridge 漏洞挖掘_adnroid jsbridge 不安全的资源引用-程序员宅基地

文章浏览阅读825次。一、概述1. JSBridge介绍什么是JSBridge主要是给 JavaScript 提供调用 Native 功能的接口,让混合开发中的前端部分可以方便地使用 Native 的功能(例如:地址位置、摄像头)。而且 JSBridge 的功能不止调用 Native 功能这么简单宽泛。实际上,JSBridge 就像其名称中的Bridge的意义一样,是 Native 和非 Native 之间的桥梁,它的核心是构建 Native 和非 Native 间消息通信的通道,而且这个通信的通道是双向的。双向通信的通_adnroid jsbridge 不安全的资源引用

OpenCV+Mediapipe+UDP+Unity挥手电子书翻页_unity opencv 虚拟翻书-程序员宅基地

文章浏览阅读2k次,点赞13次,收藏43次。OpenCV+Mediapipe+UDP+Unity挥手翻页_unity opencv 虚拟翻书

推荐文章

热门文章

相关标签