分布式计算理论与实战: 开篇

分布式计算背景

计算机发展到今天已经成为了大部分复杂计算任务的首先工具,常见的计算方式分为集中式计算与分布式计算,其中集中式计算任务完全依赖于一台大型的中心计算机的处理能力。

background

background

分布式计算恰恰相反,大量的计算任务被精心的进行切分划分给集群中的各个节点进行计算。对比集中式计算,分布式计算面临的挑战更多,有因为它的各种优良特性,所能处理的任务也更多。

三种计算任务类型

以下是三种比较常见的分布式计算任务类型:

  1. 不需要迭代处理的计算任务。例如典型的WordCount,可以使用Hadoop MapReduce进行处理。
  2. 需要迭代处理的图计算任务。例如网页PageRank计算,可以使用Spark、Naiad进行处理。
  3. 需要迭代处理的机器学习任务。例如计算拥有大数据逻辑回归任务,可以使用Spark、参数服务器进行处理。

这篇专栏的所讨论的技术点也将围绕着这三种计算任务类型进行。其中最后一点的机器学习任务将会带着大家手把手写一个最近比较火的参数服务器框架。

分布式计算技术

Master-Slave架构

Master-Slave一直是大多数分布式计算框架的基础架构。这样的设计可以简化协商的过程,直观的确保数据的一致性。Master-Slave架构多用于数据库领域,主要目的为读写分离,写操作只针对主节点,写操作只读,以保证数据的安全性。

HDFS的Master-Slave架构运用是一个典型的例子:

master-slave

master-slave

  • NameNode: 扮演着Master的角色,主要保存着元数据信息,比如命名空间、块信息等
  • Secondary NameNode: 同样是Master的一部分,定期合并FsImage和edits日志文件,相对于NameNode是一个辅助性的检查节点
  • DataNode: 扮演者Slave的角色,用来保存数据信息,同时要是数据读写的真正对象

MapReduce

Hadoop MapReduce是第一代开源的大型分布式数据计算系统,在谷歌发出Map-Reduce与GFS论文之前,分布式系统的设计者们尚不重视容错性。MapReduce利用其任务重发机制,大大增强了容错性。

然而MapReduce的设计虽然能够解决大部分无状态任务,例如WordCount,但是它对于其它类型的任务却是爱莫能助了:

  1. 迭代型计算任务。通常需要通过使用梯度下降优化方法来进行计算,如机器学习逻辑回归、K-Means、LDA等算法使用MapReduce实现并不高效。
  2. 流水线型计算任务。倘若下个阶段基于上一阶段的结果进行计算,那就要从磁盘中将数据读取出来,大大增加了计算等待时间。

DAG (无向图) 计算

DAG是指数据结构中的有向无环图,在大数据计算中可以方便的用来描述一个大的计算任务中的各个子任务之间的关系,将这些子任务的逻辑方向进行连接、构建,就可以得到一个DAG结构。典型使用该结构作为主要架构的框架有FlumeJava和Dryad.

DAG计算常常被分为三层:

  1. 最上层,应用表达层,通过一定的手段将计算任务分解成若干子任务。使用这种思想可以方便开发者快速的使用框架来构建自己的应用。
  2. 中间层,执行引擎层,通过特殊的方法来表达DAG计算任务,通过转换和映射将其部署到物理机集群中。这一层是框架的核心组件,主要任务包含计算任务的调度、底层硬件的容错、数据与管理信息的传递等等。
  3. 最下层,由大量物理机器搭建的分布式计算环境组成,是计算任务的最终执行场所。

比较具有代表性的框架有谷歌的FlumeJava与微软的Dryad。

Spark RDD 内存计算

使用Hadoop Mapreduce计算中,每个作业都需要从物理磁盘中读取数据,计算完成后再将数据写入物理存储设备。这样做虽然能够方便的保证数据容错性,但是却会导致计算多个作业的过程中,数据需要反复从物理磁盘写入、读取,导致整体计算效率降低。

Spark RDD机制正是用来解决这个问题,保证各个任务之间的数据能够通过内存进行共享,提升了计算效率。同时也通过巧妙的lineage机制,在错误发生时进行数据重建,保证的数据的容错性。

流计算

上述提到的Hadoop MapReduce, Spark, DAG计算都属于离线计算的范畴,特点在于所有输入数据都是已知且不会再产生变化。离线计算同时也具有数据量巨大、保存时间长的特性。

与离线计算对应的是实时计算,特点在于数据是实时入库并且需要进行实时的计算的。主要的应用在于一些用户需要响应时间是实时的场景,例如典型的搜索指数、热门搜索等。

与实时计算相近的计算方式有流计算,具有代表性的框架有Storm,Spark Streaming和Flink。

streaming

streaming

去中心化的分布式AI平台

机器学习参数服务器

随着机器学习计算的复杂度与数据量的上升,单机存储所有模型参数的要求越来越高,传统的分布式计算框架已不能缓存爆炸性增长的参数。参数服务器框架主要就是用来解决这一痛点,可以说是为分布式机器学习计算量身打造的框架。

参数服务器最突出的特性在于其迭代性,模型的训练并非一次就完成,而是需要循环迭代多次直至收敛到最优解。适用于大规模的深度学习系统、逻辑回归、主题模型、矩阵分解等算法模型。

top Created with Sketch.