分布式计算技术
MR(MapReduce)
分而治之计算模式
定义
将一个复杂的、难以解决的大问题,分割成一些规模较小的,可以比较简单的或者可以直接求解的子问题,这些子问题之间相互独立且与原问题形式相同,递归的求解这些子问题,然后将子问题解合并到原问题的解
特点
- 问题规模比较大
- 问题可以分解为几个规模比较小的、简单的同类型问题进行求解
- 子问题之间相互独立
- 子问题的解可以合并得到原问题的解
核心步骤:1、分解原问题 2、 求解子问题 3、合并解
MR计算模型
抽象模型
MapReduce 分为两个阶段Map Reduce
- Map 把复杂的任务分解为若干个“简单的任务”执行
- Reduce 对Map阶段的结果汇总
处理流程
特点
- 可以大规模扩展,适用于大型计算机集群
- 拆分后的任务,可以跨多个计算机去执行,且各个小任务之间不会相互通信
Stream
流数据:持续快速产生,具有时效性的数据
流计算:实时获取来自不同数据源的海量数据,进行实时分析处理,获得有价值的信
息。
Stream 工作原理
一般包括三个步骤
- 提交流式计算作业
- 加载流式数据进行流计算
- 持续输出计算结果
Storm
Storm 是一个分布式的、容错的实时计算系统,可以持续进行实时数据流处理,
也可以用于分布式 RPC
Storm 集群
- Master Node
- Nimbus 负责为集群分发代码,为工作节点分配任务以及进行故障监控
- 一个 Storm 集群在工作过程中,只有一个Nimbus 进程工作
- Worker Node
- Supervisor 负责监听分配给它所在的机器上的工作,负责接收 Nimbus 分配的任务,并根据需要启动和停止工作进程,其中每个工作进程都执行一个子任务
- Spout:一种工作节点,接受数据源
- Bolt: 一种工作节点,负责处理输入的数据流
- 二者通过ZooKeeper 集群加强可靠性
Spout & Bolt 拓扑(有向五环图)
Actor 计算模型
Actor
Actor 类似于一个“黑盒”对象,封装了自己的状态和行为,使得其他 Actor 无法
直接观察到它的状态,调用它的行为
Actor 模型
代表一种分布式并行计算模型。这种模型有自
己的一套规则,规定了 Actor 的内部计算逻辑,以及多个 Actor 之间的通信规则
计算模式
- 状态: Actor组件本身的消息
- 行为: Actor的计算处理逻辑
- 消息: Actor的消息以邮件形式在多个Actor之间通信传递,每个Actor有自己的一个邮箱,由于接受来至其他Actor的消息
Actor工作原理
关键特征
- 实现了跟高级的抽象
- 非阻塞性
- 无需使用锁
- 并发度高
- 易扩展
不足
- 代码重用性小
- 系统开销大
- 实现复杂
- 不适用于对消息顺序有严格要求的系统
模型应用
- Erlang/OTP: Erlang 是一种通用的、面向并发的编程语言,使用 Erlang 编写分布式应
用比较简单,而 OTP 就是 Erlang 技术栈中的标准库 - **Akka(Java Scale):**Akka 是一个为 Java 和 Scala 构建高度并发、分布式和弹性的消息驱动应用程序
的工具包 - Quasar(Java ): 开源的JVM库,极度简化了高度并发软件的创建
流水线
流水线计算模式
计算机中的流水线技术
是一种将每条指令拆分为多个步骤,多条指令的不同步骤重叠操作,从而实现几条指令并行处理的技术
流水线计算模式
将一个大任务才分为多个步骤执行,不同的步骤可以采用不同的进程执行
流水线计算模型
TensorFlow
【 输入】流水线
步骤
- 提取
- 转换
- 加载
原理
当 CPU 对第 N 个样本的数据完成预处理之后,会将预处理后的数据发送给GPU/TPU,
然后 CPU 继续对第 N+1 个样本的数据进行预处理,同时 GPU/TPU 对第 N个样本数据进行模型训练
优势
- 提高CPU、GPU/TPU的利用率
- 加速训练过程
机器学习流水线
步骤
- 数据输入
- 数据转换
- 数据提取
- 数据训练
- 数据验证
HTTP 流水线传输
计算机图形学中的图流水线
指令流水线
流水线计算和流计算的区别
- 流水线计算主要强调一个任务的拆分后并行执行,可以重复执行,流计算更强调实时性、不可重复性
- 流水线计算主要关注最终结果,不太关注中间结果,流计算则关注持续输出结果