主页 > 新闻资讯 > 大数据学习:分布式计算系统发展历程

大数据学习:分布式计算系统发展历程

作者:张老师 浏览次数: 2021-02-05 16:54
之前我们讲了分布式存储系统的发展历程,今天接着来讲存储之后的下一个重要环节——计算。要从海量的数据集合当中去挖掘出相应的价值,就需要经历计算的过程。今天的大数据学习分享,我们就主要讲分布式计算系统的发展历程。

首先,关于分布式计算,大致也可以分为几个类别:传统基于MSG的系统、MapReduce-like系统、图计算系统、基于状态(State)的系统、Streaming系统。

大数据学习:分布式计算系统发展历程

传统基于MSG的系统:

这类系统里比较有代表性的就是MPI(Message Passing Interface)。目前比较流行的两个MPI实现是MPICH2和OpenMPI。

MPI这个框架非常灵活,对程序的结构几乎没有太多约束,以至于大家有时把MPI称为一组接口API,而不是系统框架。在这些API里最常用的两个就是send和recv接口(还有一系列非阻塞扩展接口,例如:Isend、Irecv等)。

MPI除了提供消息传递接口之外,其框架还实现了资源管理和分配,以及调度的功能。除此之外,MPI在高性能计算里也被广泛使用,通常可以和Infiniband这样的高速网络无缝结合。

除了send和recv接口之外,MPI中另一个接口也值得注意,那就是AllReduce。这个接口在很多机器学习系统开发里都很用。因为很多并行机器学习系统都是各个进程分别训练模型,然后在合适的时候(例如一轮迭代结束)大家同步一下答案,达成共识,然后继续迭代。

这个“达成共识”的操作往往可以很方便地通过AllReduce来完成。AllReduce接口具有两个优点:高效和使用简单。先说说为什么使用简单:使用AllReduce通常只需要在单机核心源码里加入AllReduce一行代码,就能完成并行化的功能。说AllReduce高效的原因是因为其底层消息传递使用了Tree Aggregation,尽可能地将计算分摊到每一个节点。

可是,既然AllReduce这么好,为什么在实际大规模计算中很少看到呢?原因很简单,就是因为MPI不支持容错,所以很难扩展到大规模集群之上。

MapReduce-like系统:

这一类系统又叫作Dataflow系统,其中以MapReduce(Hadoop)和Spark为代表。这一类系统的特点是将计算抽象成为High-Level Operator,例如像Map、Reduce、Filter这样的函数式算子,然后将算子组合成DAG,然后由后端的调度引擎进行并行化调度。其中,MapReduce系统属于比较简单的DAG,只有Map和Reduce两层节点。

MapReduce这样的系统之所以可以扩展到超大规模的集群上运行,就是因为其完备的容错机制。在Hadoop社区还有很多基于MapReduce框架的衍生产品,比如Hive(并行数据库OLAP)、Pig(交互式数据操作)等等。

MapReduce-like的编程风格和MPI截然相反。MapReduce对程序的结构有严格的约束——计算过程必须能在两个函数中描述:Map和Reduce;输入和输出数据都必须是一个一个的Records;任务之间不能通信,整个计算过程中唯一的通信机会是Map Phase和Reduce Phase之间的Shuffuling Phase,这是在框架控制下的,而不是应用代码控制的。因为有了严格的控制,系统框架在任何时候出错都可以从上一个状态恢复。Spark的RDD则是利用Lineage,可以让数据在内存中完成转换。

由于良好的扩展性,许多人都将机器学习算法的并行化任务放在了这些平台之上。比较有名的库包括Mahout(基于Hadoop),以及MLI(基于Spark)。

图计算系统:

图计算系统是分布式计算里另一个分支,这些系统都是把计算过程抽象成图,然后在不同节点分布式执行,例如PageRank这样的任务,很适合用图计算系统来表示。最早成名的图计算系统当属Google的Pregel,该系统采用BSP模型,计算以Vectex为中心。

随后又有一系列图计算框架推出,例如:GPS(对Pregel做了优化,除了Vectex-centric Computation,还有Global Computation,动态调整分区等等。)Giraph/Hama都是基于Hadoop的Apache的开源BSP图计算项目。

除了同步(BSP)图计算系统之外,异步图计算系统里的佼佼者当属GraphLab,该系统提出了GAS的编程模型。目前这个项目已经改名为Dato,专门推广基于图的大规模机器学习系统。

基于状态(State)的系统:

这一类系统主要包括2010年OSDI上推出的Piccolo,以及后来2012年NIPS上Google推出的DistBelief,再到后来被机器系学习领域广泛应用的Parameter Server架构。这里我们重点介绍一下Parameter Server这个架构。

我们之前说,MPI由于不支持容错所以很难扩展至大规模集群之中;MapReduce系统无法支持大模型机器学习应用,并且节点同步效率较低。用图抽象来做机器学习任务,很多问题都不能很好地求解,比如深度学习中的多层结构。

而Parameter Server这种State-Centric模型则把机器学习的模型存储参数上升为主要组件,并且采用异步机制提升处理能力。参数服务器的概念最早来自于Alex Smola于2010年提出的并行LDA架构。它通过采用分布式的Memcached作为存放参数的存储,这样就提供了有效的机制作用于不同Worker节点同步模型参数。

Streaming系统:

Streaming系统听名字就能看出来是为流式数据提供服务的。其中比较有名的系统包括Storm、Spark Streaming、Flink,这也是当下的大数据领域当中,备受重用的几个框架,之前我们也有不少文章分享过了,这里就不再展开。

关于大数据学习,分布式计算系统发展历程,以上就为大家做了大致的介绍了。在大数据领域,分布式计算是重要的支持环节,分布式计算的发展,也会大数据处理带来更多可靠的解决方案。成都加米谷大数据,专业大数据培训机构,大数据开发,数据分析挖掘,零基础班本月正在招生中,课程大纲及学习视频,可联系客服获取!
热点排行
推荐文章
立即申请>>