分布式数据流计算系统的数据缓存技术综述Word文档下载推荐.docx
- 文档编号:13418030
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:11
- 大小:147.70KB
分布式数据流计算系统的数据缓存技术综述Word文档下载推荐.docx
《分布式数据流计算系统的数据缓存技术综述Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《分布式数据流计算系统的数据缓存技术综述Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。
(1)高度并行计算在数据流方法中,由于没有指令执行顺序的限制,从理论上来说,指令执行更加灵活,通过系统优化可以获得最大的并行性。
相似地,其灵活性同样适用于高度异构计算。
(2)支持流水线处理由于在指令中直接使用数值本身,而不是使用存放数值的地址,因此可以在过程级及指令级充分开发异步并行性,把串行执行算子实际处理的数据变成一条异步处理流水线,即前一个算子处理完部分结果后就让后一个算子开始处理。
(3)函数式编程面向数据流的编程模型对丰富的算子进行了抽象,通过用户定义函数为算子指定用户处理逻辑,用户无须使用变量维护中间状态,实现优化空间巨大且灵活的函数式编程。
目前许多主流的计算系统(如Spark、Flink、TensorFlow、GoogleDataflow等)采用了数据流编程模型。
一个数据流程序中一般包含算子和中间结果数据两大类元素,算子还包含数据源算子(source)、数据池算子(sink)、转换算子(transformer)。
数据源是数据的生产者,如文件或者视频采集设备;
数据池指定程序输出的位置,如文件或者数据库;
转换算子是系统提供或者用户自定义的数据操作集合,描述对一个或多个输入数据的处理过程,同时输出一个或多个中间结果数据。
中间结果数据位于各算子之间,是由算子产生或供算子消费的数据。
数据流处理程序采用算子连接数据流的模式,当一个数据流程序被执行的时候,它会被映射为一个有向无环图(directedacyclicgraph,DAG),数据流图的顶点为算子,数据流图的边为中间结果数据。
程序启动时从一个或多个数据源算子开始,结束于一个或多个数据池算子。
数据流模型不仅被应用于内存计算中,也被应用到分布式集群(如Spark)或者异构计算环境(如TensorFlow)中,算子可能被设计为跨多台机器的分布式算子,有些算子在CPU执行,有些算子在GPU执行,甚至是跨CPU-GPU执行。
而算子之间数据的流动需要考虑跨网络或者跨CPU-GPU的情况,数据流的维护和管理也不仅在内存中完成。
在这种分布式数据流系统和异构数据流系统中,算子和数据不再统一存在于单机内存中。
算子之间数据生产和数据消化的速度不一致可能会导致数据堆积或者算子闲置等问题,造成严重的空间开销,影响数据流系统的效率。
为了支持高效的数据流系统,需要为分布式数据流系统和异构数据流系统设计数据流的缓存系统,以保证数据流在分布式计算节点之间或者异构CPU-GPU之间的高效缓存和移动。
然而,目前并没有针对分布式或异构数据流系统的通用数据流缓存系统。
现有的消息队列(messagequeue,MQ)系统(如Kafka等)常被用作数据源算子的数据缓存系统,特别是为视频采集设备这种主动推送数据源提供数据缓冲支持。
这些系统利用优化的分布式存储将数据消息存到保持数据有序性的消息队列中,可以在一定程度上满足缓存需求。
本文选取Kafka、RabbitMQ、ActiveMQ、Pulsar5个典型的分布式消息队列系统进行系统分析,并分析未来的数据流缓存系统的需求和研究方向。
2分布式数据流计算系统概述
2.1数据流计算模型
计算模型是对计算任务完成过程的一种抽象描述,主要由3个部分组成:
计算任务的描述方法、计算任务的执行机构以及计算任务在执行机构上的运行方法。
根据计算任务的描述形式,可以将计算模型分为控制流计算模型和数据流计算模型。
在控制流计算模型中,采用控制流的方式描述计算任务。
控制流即以控制驱动程序。
以下面包含控制流概念的代码1为例,由于控制条件的存在,无论输入是多少,总是执行被控制的部分,而不执行另一部分。
在控制流计算模型中,进行数据传递的关键是借助变量保存中间状态。
通过中间变量,可以根据任务的执行逻辑将其划分为不同的阶段,这样一来,每个阶段只需要完成一部分逻辑子功能即可。
将代码1的控制逻辑用数据流的方式表示,如代码2所示,代码的执行逻辑以流水线的方式按顺序执行。
不论是否满足条件,均执行相应代码,只不过数据总是只满足一种情况,最后将两部分的结果做交集。
如果上游输入数据不断到来,这段代码便可以不断地执行下去,并且总是同时执行真(ture)和假(false)的分支逻辑,但是无论何时,总有一个分支上的流水线的数据集为空。
在数据流计算模型中,用数据流图的形式表示计算任务。
根据任务中不同子任务的依赖关系将其转化为数据流图,复杂的程序逻辑便可以容易地以流水线的方式执行,同时提高执行效率。
数据流编程模型是以数据驱动程序的,一个处理逻辑的输出作为下一个处理逻辑的输入,无须维护数据的中间状态,将这种处理逻辑抽象为算子,通常不同算子之间的任务相互独立,可以在不同的线程上执行。
在分布式或异构的环境下,算子也可以在不同的机器或容器内执行。
只要数据到达,算子即可开始处理,从而使得各个算子形成流水线的结构,数据则在流水线中被并行处理,这种处理方式在处理具有复杂依赖关系的程序逻辑时有天然的优势。
在数据流图中,用节点和边描述程序逻辑。
其中,节点表示操作,即数据流的逻辑计算单元,有向边表示数据依赖关系。
数据流计算模型的核心思想是用数据控制计算。
当一个操作所需的数据全部准备完毕之后,便可以启动运算。
当只有部分数据到达时,则需要等待。
当一个操作执行完成并将结果传递给下一个操作后,无论下一个操作是否能正常执行,这个操作都可以立刻对新数据进行计算。
如此,整个程序便可以以流水线的方式并行执行。
图1显示了在数据流系统Spark中分别对2组数据进行映射(map)和过滤(filter)之后再进行连接(join)的执行过程,弹性分布式数据集(RDD)表示Spark中的基本数据集。
首先,数据集1(RDD1)和数据集2(RDD2)准备完毕,并被输入计算节点中,分别执行映射和过滤操作,这两步没有相互依赖的关系,也没有执行先后之分。
然后,当连接算子的2个操作数都准备完毕后,即数据集3(RDD3)和数据集4(RDD4)已经计算得出时,执行连接操作。
最后,计算出结果,数据向下一个计算单元传输。
在连接操作进行的同时,如果有新的映射或过滤操作数到达,映射操作或过滤操作可以同时执行。
如此,数据流图中多个计算节点便可以以流水线的方式并行执行。
当一个程序有多个这样的计算过程时,它们之间也可以以流水线的方式并行执行。
传统的计算机采用控制流作为计算机的核心,即冯·
诺伊曼体系结构,它通过一个中央处理器执行计算任务,用程序计数器根据程序控制逻辑控制指令依次执行。
数据流的体系结构不同于传统的冯·
诺伊曼体系结构,它以数据为驱动,数据在程序运行过程中起主导作用,这对于计算机发展来说是一个突破。
针对数据流计算机的具体设计方案有很多,学术界和工业界也相继成功研制出一些专用机。
以全新的体系结构设计出的数据流计算机不再需要CPU,而是把功能分散到各个部件中,取消了程序计数器,以数据是否到达异步控制每一条指令的执行,这样更容易实现数据的并行。
但这种新型的体系结构仅适用于某些特殊应用场景,还不能代替传统的控制流计算机。
进入20世纪80年代后,随着多线程概念的发展,学术界和工业界的研究者更多地将研究重点放在更高层次的线程级并行上,结合传统控制流与数据流的优势研究数据流计算模型。
图1
数据流模型示例
虽然在硬件上已经能够做到支持数据流并行,但在软件生态上仍发展落后,难以在实际生产中应用。
数据流计算模型在算法程序设计中的优势引起了广大研究者的关注,与传统并行计算模型算法相比,基于数据流的并行计算模型具有支持度高、可拓展性好、性能功耗比高等优点,许多数据流执行模型相继被提出。
而由于大数据的快速发展,对大数据的处理需要更加高效的平台,因此在现有硬件的基础上,以数据流为核心的大数据处理平台应运而生。
2.2主流分布式数据流系统
依赖数据流的概念,工业界发展出许多支持大数据处理、机器学习等任务的系统,这些系统在大数据、人工智能时代发挥着举足轻重的作用。
结合控制流和数据流的优势,Suettlerlein等人、Flink、TensorFlow、GoogleDataflow等。
这些系统在多次的版本迭代中不断适应变化的需求,发挥着越来越重要的作用,展现出越来越强大的性能,逐步实现对异构环境的支持、对新硬件的支持以及在云环境下的应用等。
当然,还有一些系统由于一些限制并没有得到大规模的应用,但在数据流系统的应用探索中也扮演着重要的角色,例如HAMR基于Codelet执行模型,并拓展到集群系统中,实现了更好的资源利用和任务同步,同时支持批处理和实时流处理。
Naiad引入时间戳(timestamp)的概念描述任意复杂的流式计算,同时也解决了一般分布式系统难以处理的增量计算问题。
Yita由中兴飞流信息科技有限公司研发,是基于数据流的运行时系统,采用特有的、动态的、细粒度的任务调度及资源管理,在计算性能、资源消耗等方面表现优异。
几个目前比较流行的数据流系统如下。
(1)SparkSpark是由美国加州大学伯克利分校的AMP实验室于2009年开发的基于内存计算的大数据并行处理框架。
作为大数据处理平台的后起之秀,Spark在2014年打破了由Hadoop保持的基准排序记录,对于同样的数据集,Spark仅用Hadoop十分之一的计算资源便将计算速度提高3倍。
Spark以其运行速度快、易使用、通用性好以及运行模式多样的优势得到了众多开发者的青睐。
Spark最大的特点就是基于内存,数据和中间结果都存储在内存中,避免了频繁的磁盘I/O开销。
除此之外,Spark采用数据流计算模型,将一个应用划分为不同的任务,然后根据其依赖关系转化为DAG,在DAG中,各个任务以数据流的模式执行,极大地开发了程序中潜在的并行性,大大加快了执行效率。
(2)GoogleDataflowGoogleDataflow是由谷歌公司研究开发的一个数据处理模型,其目的在于提供一种统一批处理和流处理的系统。
Dataflow模型基于事件时间(event-time)实现对流式数据的顺序处理,支持非对齐的窗口聚合,在正确性、时延和成本之间能做到较好的平衡,并实现数据处理中的逻辑概念和底层物理之间的解耦。
目前已经在GoogleCloud(谷歌云)中使用,其针对批数据和流数据提供统一的应用程序接口(applicationprogramminginterface,API),开发者能够更加聚焦于数据逻辑本身定义数据处理流水线,然后由GoogleCloud执行。
(3)FlinkFlink起源于一个叫作Stratosphere的研究项目,旨在建立下一代大数据分析引擎,于2014年4月成为Apache的孵化项目。
Flink的基本模型也是数据流模型。
它同时支持批处理和流处理,将计算任务转化为DAG,以数据流的模式执行。
相对于Spark框架而言,Flink支持更高吞吐率、低时延、高性能的流处理,更适合对实时性要求高的场景。
(4)TensorFlowTensorFlow是谷歌公司在2015年开源的通用高性能计算库,用于机器学习和深度神经网络方面的研究,它的通用性使其也可以应用于多种计算领域。
TensorFlow也采用数据流的形式进行计算。
数据流图中的节点表示数学操作,边表示节点之间相互联系的数据数组,即张量。
一旦输入端的所有张量准备好,节点将被分配
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分布式 数据流 计算 系统 数据 缓存 技术 综述
![提示](https://static.bdocx.com/images/bang_tan.gif)