分布式计算之并行计算

1、并行计算

并行计算或称平行计算是相对于串行计算来说的它是一种一次可执行多个指令的算法目的是提高计算速度及通过扩大问题求解规模解决大型而复杂的计算问题所谓并行计算可分为时间上的并行和空间上的并行 时间上的并行就是指流水线技术而空间上的并行则是指用多个处理器并发的执行计算。这个是多核处理器环境下的并行计算的定义,从宏观上来看,这个属于计算机应用服务器的垂直扩展,在这里我们就不展开讨论了。

分布式计算上的并行计算,首先要把任务进行拆分,对不同的任务要进行不同的拆分,拆分后进行计算,最终的计算数据进行汇总。

还是到年底了,要做很多的报表,领导把需要的报表安排下来,我和我的团队去做统计。异步计算并不能减少领导拿到最终结果的时间;我们要想办法,我作为调度系统,把需要的报表进行分拆,发现需要8组数据,我安排8位帅哥去获取这些数据,这8位攻城狮把数据提供给我,我按照规则把报表完成,并提供给领导。这个大概就是一个简单的并行计算模型了。

拆分和合并,是在分布式计算中的伟大的思想,这个也是Map/Reduce的思想。

2、Map/Reduce

Map/Reduce,它认为所有的计算任务都可以经历从拆分到汇总的两个过程,也就是说,只要用Map和Reduce就可以描述所有的计算任务,就好比用0和1就能存储所有的数据一样。

MapReduce通过把大工作分成不同的小工作再分发给不同的工作者来实现数据的可靠性。每一个单独的工作者处理分发的工作,然后把结果和状态返回给父节点。如果一个节点失效了,主节点会发现和记录这个失效的节点,把分配给这个节点的工作再分发给别的节点。

3、Map/Reduce执行过程:

1.Master 把输入文件分成M
份,通常16M
– 64M每份

2.Master选择处于Idle状态的worker,assign一份给他,此时worker的角色是map
worker,assign的过程很简单,就是把这个task piece传输到worker上

3.Map worker拿到任务后读取task的内容,解析出key/value pairs,这些中间结果开始是存在worker的内存里面,周期性的写到map
worker的本地磁盘上。但是map worker产生的中间结果不是写在一个文件里,而是由partition function分割成R个中间文件,尽量把相同的keykey/value对写在一个中间文件里。

4.当map完成task以后,会把这些partition文件在本地磁盘中的位置通知master。

5.Master接到任务完成的消息后,寻找idle状态的worker,通知他去reduce,此时的worker就是reduce
worker(值得注意的是刚刚完成任务的 map worker可能会担当reduce worker的角色),reduce
worker通过RPC读取map worker
磁盘上的中间文件到本地磁盘,读完之后,reduce worker对其进行排序,如果中间文件太大,就要用外部排序。

Master并不是随便找一个worker来做reduce的,尽量让一个reduce
worker做包含同样key的partition文件。

比如:map work1
包含R个partition文件,key为K1,K2.。。。。。KR,master会把所有map
works产生的partition文件含有K1的尽量交给同一个reduce
worker,当然这里面也有个负载平衡的问题。

6.Reduce work把合并后的结果写入一个文件,因为一个reduce worker尽量处理同一个key的partition文件,所以当reduce
worker合并完成之后,所有包含这个key的结果都在这个文件里了

7.Reduce work把合并的结果传回master

8.当所有的reduce workers都完成之后,master得到了R个结果文件(每个reduce
worker一个),唤醒用户进程,把R个结果文件交给客户程序。

4、Map/Reduce优化

1.合并函数

Map往往会产生大量的key/value对,比如1万个{a,1},这些都要被reduce来合并,可以在reduce工作之前有合并函数对map中的key/value对进行合并。看起来,合并函数和reduce函数一样,其实还是不同的,合并函数所合并的是map本地的key/value对,产生的结果写入map的本地buffer;reduce函数合并的是来自不同map的partition文件,产生的结果传回master。

2.容错处理

Cluster的庞大集群,机器出现故障是必然的,所以master要进行容错处理。在master上会记录所有集群内或者子群内worker的状态,不断获取正在工作的worker的心跳,如果worker死掉了,那么会把这个worker标记为down,把他上面执行的任务重新分配给另外的worker。但是如果master死掉了怎么办?因为集群内只有一个master,那么需要根据日志进行恢复(可参考分布式文件系统)。

时间: 2024-10-24 19:12:38

分布式计算之并行计算的相关文章

云计算、分布式计算、并行计算、网格计算、集群

转自:http://blog.csdn.net/cuidiwhere/article/details/7884545 并行计算:并行计算是相对于串行计算来说的.可分为时间上的并行和空间上的并行. 时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算.例如基于CUDA编程.并行计算的目的就是提供单处理器无法提供的性能(处理器能力或存储器),使用多处理器求解单个问题. 总结:并行的主体 -- 处理器:进程/线程级并行. 分布式计算:分布式计算研究如何把一个需要非常巨大的计算能

分布式计算 网格计算 并行计算 云计算

先说分布式计算和并行计算的异同: 解决对象上:都是大任务化为小任务,这是他们共同之处. 但是分布式的任务包互相之间有独立性,上一个任务包的结果未返回或者是结果处理错误,对下一个任务包的处理几乎没有什么影响.因此,分布式的实时性要求不高,而且允许存在计算错误(因为每个计算任务给好几个参与者计算,上传结果到服务器后要比较结果,然后对结果差异大的进行验证,我个人感觉这样有助于发现科学家们真正想要找的)! 分布式要处理的问题一般是基于“寻找”模式的.所谓的“寻找”,就相当于穷举法!为了尝试到每一个可能存

【hadoop】MapReduce分布式计算框架原理

PS:实操部分就省略了哈,准备最近好好看下理论这块,其实我是比较懒得哈!!! <?>MapReduce的概述 MapReduce是一种计算模型,进行大数据量的离线计算.MapReduce实现了Map和Reduce两个功能:其中Map是滴数据集上的独立元素进行指定的操作,生成键——值对形式中间结果.其中Reduce则对中间结果中相同“键”的所有“值”进行规约(分类和归纳),以得到最终结果. <?>如何进行并行分布式计算? 并行计算(如SPARK) 是相对于串行计算而言,一般可分为时间

云计算对于传统软件工程的影响

云计算对传统软件工程的影响 传统软件工程的概念 传统软件工程采用的一是结构化泛型,基本阶段按顺序如下:需求阶段.规格说明阶段.设计阶段.实现阶段.集成阶段.维护阶段.退役等,这是一种适用于代码量适中的传统软件开发方式. 而随着社会进步与技术发展,软件越来越复杂,计算越来越繁琐,代码量也越来越大,存储和处理的信息越来越多,软件规模也越来越大.而传统的结构化设计方法在大规模的软件的开发组织和维护方面困难重重,软件的复用性能也不好.于是发展出了云计算的概念. 云计算的概念 云计算是以数据为中心的一种数

云计算IaaS浅谈

(本篇文章仅仅是整理文档资料时,发现的一篇课程报告,感觉还挺有参考意义的) 最近几年云计算一直是IT业的热点,一股炽热的云计算浪潮席卷了世界,全世界都在讲云计算,都在搞云计算.虽然最初是由谷歌公司提出的相关理论和概念,但很多公司随后也提出了不少新的概念,这都为云计算的落地做出了很大的贡献.虽然,云计算的发源地是美国,但和很多其他技术不同的是,我们国家没有在云计算领域落后世界太远. 云计算虽然是一种新的概念,但它不是一种新的技术,它仅仅是一种新的资源运用方式.云计算脱胎于现有技术,它是由网格计算.

分布式系统

Distributed systems: for fun and profit (http://book.mixu.net/distsys/index.html) 链接:https://www.zhihu.com/question/23645117/answer/124708083 这篇文章主要试图回答以下两个个问题:1. 近些年分布式系统领域都在做些什么.2. 为什么现在投入分布式系统的学习和研究是值得的.我会尽可能多的去介绍更 "实用" 的分布式系统知识. 什么是实用?例如:Pax

jQuery中的编程范式

浏览器前端编程的面貌自2005年以来已经发生了深刻的变化,这并不简单的意味着出现了大量功能丰富的基础库,使得我们可以更加方便的编写业务代码,更重要的是我们看待前端技术的观念发生了重大转变,明确意识到了如何以前端特有的方式释放程序员的生产力.本文将结合jQuery源码的实现原理,对javascript中涌现出的编程范式和常用技巧作一简单介绍.    1. AJAX: 状态驻留,异步更新      首先来看一点历史. A. 1995年Netscape公司的Brendan Eich开发了javacri

openstack概述

防伪码:有朝一日龙腾水,我让长江水倒流. 如何理解云? 云是基于"云计算"技术,实现各种终端设备之间的互联互通.手机.电视机等都只是一个单纯的显示和操作终端,它们不再需要具备强大的处理能力.用户享受的所有资源.所有应用程序全部都由一个存储和运算能力超强的云端后台来提供.像我们现在经常使用的在线杀毒.网络硬盘.在线音乐等都属于云服务范畴. 云计算的概念可以从用户.技术提供商和技术开发人员三个不同角度来解读. 用户看云计算 从用户的角度考虑,主要根据用户的体验和效果来描述,云计算可以总结为

Stream computing

在传统的数据处理流程中,总是先收集数据,然后将数据放到Database中,人们需要的时候通过DB对数据做query,得到答案.这样的一个流程隐含了两个前提:1. data is old.当人们对DB做查询的时候,里面数据其实过去某一个时刻数据的一个snapshot,数据已经老了,可能已经过期了.2. 这样的流程中,需要人们主动的发出query.也就是说,human active, DB passive.但在某些时候,这两个前提都不存在.例如股票市场中,数据总是不断的产生,人们需要根据当前的数据实