分布式计算

本文介绍了分布式计算的三种主要方法:MapReduce、流计算和Actor模型。MapReduce通过分而治之的思想,将大规模任务拆分成子任务,由Mapper和Reducer处理。流计算针对实时数据流,强调快速处理和持续输出结果。Actor模型则是一种并行计算模型,每个Actor拥有状态、行为和邮箱,通过异步消息传递进行通信。这三种模型各有优劣,适用于不同的分布式计算场景。

分布式计算技术

主要讲述了4种分布式计算



前言

简单总结一下集中分布式计算方式

一、MapReduce

Hapdoop作为一个解决海量数据计算问题的框架,它到底是怎么实现的呢?

1.分而治之的思想

分而治之顾名思义就是把一个大的复杂的任务分为若干个相对简单的小的任务,这些小的任务与原任务有着相似的形势,对这些子问题独立的求解最后再合并即可得到原问题的解。在分布式领域,有类似如下3种问题也适合分而治之的思想:

  • 问题的规模比较大,能分解为几个简单的、同类型的子问题
  • 子问题之间的解相互独立,不包含重叠部分
  • 各子问题的解能够合并得到原问题的解

采用分治法解决该类问题的步骤:

  • 分解原问题。将原问题分解为几个互相独立的、同类类型的子问题。
  • 求解子问题。分别对子问题进行递归的求解
  • 合并解。将子问题求得的解进行合并,得到最终的解

2.MapReduce

MapReduce就是采用了这一思路,MapReduce主要由MRApp(master)、mapper(worker)、reducer(worker)组成,是一个典型的主从模型,其中master的作用是负责分配任务,资源,协调任务的运行,并且为mapper分配map()操作,为reducer分配reduce()操作。mapper的作用就是计算,负责执行子任务。reducer的作用就是将mapper得到的结果进行汇总。

在这里插入图片描述

具体步骤:

  • user 将任务下发到MRAppmaster节点中,并由它将任务进行拆分。例:假设master将函数任务分为5个,其中3个函数任务给mapper, 2个给reducer。集群内的worker节点都有对应任务的副本。注意这里的对应任务是要执行的操作。
  • 接下来就是由MRAppmaster下发前面分好的任务。mapper和reducer的数量分别对应前面划分好的任务数量。
  • 被分配的map()任务的worker开始读取子任务输入的数据,并从数据中抽取出<k,v>键值对,将键值对多为参数传递给map()函数。
  • 将map()函数输出的结果放在环形缓冲区中,这些缓冲区中的数据会被定期的写入本地磁盘,被存储在R个不同的磁盘区。这里的磁盘区数量R与reducer的数量有关。此外,每个mapper结果的存储位置也会上报给MRAppmater节点。
  • 由MRAppmaster节点通知reducer它负责处理的数据在那个分区。然后reducer从对应的分区读取数据,即中间键值对。将这些键值对都读过来后,将它们进行排序,对相同键值对的数据进行组合。这一步的task就是对各mapper的结果进行统计。
  • 将具有相同键值的数据合并之后,就把统计的结果作为输出文件存储在负责的分区中。

二、流计算stream

1.什么是流数据?

流数据就是类似直播产生的音视频等数据流,这些数据如潮水般涌现,是要我们对其进行实时处理,我们将这种数据称为数据流。其主要有下面四个特点:

  • 数据如流水般持续、快速的到达。
  • 数据的规模很高。一般以TB为单位。
  • 对实时性要求很高。
  • 数据的顺序无法保证,无法控制索要处理数据的顺序。

2.stream

在分布式领域,对流数据处理的计算方式叫做stream。一般用于处理数据密集型数据。当前节点对数据进行处理后会立即将结果放到缓存中,并传入下一节点,不会等缓存写满后再发送,以保证及时性。
其工作原理如下:

  • 提交流式作业。由于数据的类型都是同一种,所以每个计算节点都有自己对应的计算逻辑,这些计算逻辑一般不可改变。这一步中还会确定下节点数据转发的规则。
  • 加载流式数据进行计算。
  • 持续输出计算结果。
  • 在这里插入图片描述

三、Actor

1.什么是Actor?

Actor是一种分布式并行计算模型。这种模型有自己的一套规则,规定了Actor内部的计算逻辑,以及多个Actor之间的通信规则,每个Actor都是一个计算单元。
Actor三要素:

  • 状态。Actor的状态是指Actor本身的组件信息,这个信息是收到Actor自身行为所影响的,只会被自己修改。
  • 行为。指的是Actor的计算操作。Actor不能主动去调用别人的操作,但可以根据自身收到的消息来进行对应的操作。
  • 消息。每个Actor都有自己的信箱,用于接收其他Actor消息。这个mailbox一般是按FIFO规则,按顺序对接受到的数据进行处理。

在这里插入图片描述

2.Actor关键特征

  • 实现了更高级的抽象。与面向对象类似,封装了自己的状态和行为。
  • 非阻塞性。异步通信,发送完消息无需等待,便可接着做其他任务。
  • 高并发性。每个Actor只关心本地的mailbox,可以同时进行工作。
  • 无需使用锁。每个Actor每次只能从自己的mailbox中读取一个消息,也就是说Actor内部每次只能处理一个消息。
  • 易于扩展。可以创建多个Actor节点,以减少现有的Actor节点负担。

Actor工作流程:
在这里插入图片描述

但是尽管Actor模型有这么多优点,但它还是并不适合分布式领域所有的计算平台和框架,主要的理由如下:

  • 如果Actor之间存在相互重叠的计算逻辑,那么当更改这部分逻辑的时候会对所有包含这段逻辑的Actor节点进行更改。
  • Actor可动态的创建多个节点,但是这有个弊端就是使得整个Actor模型得行为不断变化。在工程中不利于实现。
  • Actor由于是异步消息模式,所以并不适合于消息处理顺序由严格要求得场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值