第二章 大数据管理系统处理架构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章大数据管理系统处理架构
2.1 概述
无论是工业界还是学术界,都已经广泛使用高级集群编程模型来处理日益增长的数据,如MapReduce。这些系统将分布式编程简化为自动提供位置感知(locality-aware)调度、容错以及负载均衡,使得大量用户能够在商用集群上分析庞大的数据集。
大多数现有的集群计算系统都是基于非循环的数据流模型(acyclic data flow model)。从稳定的物理存储(如分布式文件系统)中加载记录,一组确定性操作构成一个有向无环图(Directed Acyclic Graph,DAG),记录被传入这个DAG,然后写回稳定存储。通过这个DAG数据流图,运行时自动完成调度工作及故障恢复。
尽管非循环数据流是一种很强大的抽象方法,但有些应用仍然无法使用这种方式描述,包括:(1)机器学习和图应用中常用的迭代算法(每一步对数据执行相似的函数);(2)交互式数据挖掘工具(用户反复查询一个数据子集)。基于数据流的架构也不明确支持这种处理,所以需要将数据输出到磁盘然后在每次查询时重新加载,从而带来较大的开销。
当前大数据分析处理系统的发展趋势主要有两个方向[1],如图2.1所示,一种是以Hadoop和MapReduce为代表的批处理(Batch Processing)系统,另一种是为各种特定应用开发的流处理(Stream Processing)系统,批处理是先存储后处理(Store-then-process),而流处理则是直接处理(Straight-through processing)。
图2.1 大数据分析系统框架[2]
随着大数据时代的到来,单一的计算模式已难以满足整个应用的需求,因此需要考虑不同计算模式的混合使用。Spark作为混合式计算模式的典型代表应运而生,近年来逐渐引起了学术界和工业界的广泛重视。本章首先简单介绍大数据两种代表性系统处理架构:批处理系统和流处理系统,然后详细介绍Spark系统架构、特性及性能分析。
2.2 批处理系统
Google公司在2004年提出的MapReduce编程模型是最具代表性的批处理模式。一个完整的MapReduce过程如图2.2所示错误!未定义书签。。
MapReduce模型首先将用户的原始数据源进行分块,然后分别交给不同的Map任务区处理。Map任务从输入中解析出Key/Value对集合,然后对这些集合执行用户自行定义的Map函数得到中间结果,并将该结果写入本地硬盘。Reduce任务从硬盘上读取数据之后,会根据key 值进行排序,将具有相同key 值的组织在一起。最后用户自定义的Reduce函数会作用于这些排好序的结果并输出最终结果。
从MapReduce的处理过程我们可以看出,MapReduce的核心设计思想在于:1)将问题分而治之;2)把计算推到数据而不是把数据推到计算,有效的避免数据传输过程中产生的大
量通讯开销。MapReduce 模型简单,且现实中很多问题都可用MapReduce 模型来表示。因此该模型公开后,立刻受到极大的关注,并在生物信息学、文本挖掘等领域得到广泛的应用。
图2.2 MapReduce 执行流程图[3]
无论是流处理还是批处理,都是大数据处理的可行思路。大数据的应用类型很多,在实际的大数据处理中,常常并不是简单的只使用其中的某一种,而是将二者结合起来。互联网是大数据最重要的来源之一,很多互联网公司根据处理时间的要求将自己的业务划分为在线(Online)、近线(Nearline)和离线(Offline),比如著名的职业社交网站Linkedin [4]。这种划分方式是按处理所耗时间来划分的。其中在线的处理时间一般在秒级,甚至是毫秒级,因此通常采用上面所说的流处理。离线的处理时间可以以天为基本单位,基本采用批处理方式,这种方式可以最大限度的利用系统I/O 。近线的处理时间一般在分钟级或者是小时级,对其处理模型并没有特别的要求,可以根据需求灵活选择。但在实际中多采用批处理模式。
2.3 流处理系统
流处理的基本理念是数据的价值会随着时间的流逝而不断减少。因此尽可能快的对最新的数据做出分析并给出结果是所有流数据处理模式的共同目标。需要采用流数据处理的大数据应用场景主要有网页点击数的实时统计、传感器网络、金融中的高频交易等。
流处理的处理模式将数据视为流,源源不断的数据组成了数据流。当新的数据到来时就立刻处理并返回所需的结果。图2.3是流处理中基本的数据流模型:
Data Stream
图2.3 基本的数据流模型[5]
数据的实时处理是一个很有挑战性的工作,数据流本身具有持续达到、速度快且规模巨大等特点,因此通常不会对所有的数据进行永久化存储,而且数据环境处在不断的变化之中,系统很难准确掌握整个数据的全貌。由于响应时间的要求,流处理的过程基本在内存中完成,其处理方式更多的依赖于在内存中设计巧妙的概要数据结构
(Synopsis data structure),内存容量是限制流处理模型的一个主要瓶颈。以PCM(相变存储器)为代表的SCM(Storage Class Memory ,储存级内存)设备的出现或许可以使内存未来不再成为流处理模型的制约。
数据流的理论及技术研究已经有十几年的历史,目前仍旧是研究热点。于此同时很多实际系统也已开发和得到广泛的应用,比较代表性的开源系统如Twitter的Storm[ 6]、Yahoo
的S4[7]以及Linkedin的Kafka[8]等。
2.4 混合处理系统:Spark
2.4.1 整体介绍
Spark 是一种与Hadoop 相似的开源集群计算环境,现在是Apache孵化的顶级项目,可用来构建大型的、低延迟的数据分析应用程序。Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark起始于2008年,由Yahoo的Hadoop团队与UC Berkeley AMPLab协作开发,2009年推出Spark的实例实现Mesos,2010年Spark在Apache Software Foundation (ASF)上开源(/index.html)。2013年12月19日,Spark发布了最新0.8.1版。
图2.4 Spark的发展历程及应用概览[2]
现在使用Spark的企业或团体有:Berkeley、Princeton、Foursquare、Yahoo!淘宝、百度、搜狐、豆瓣等,并且越来越引起工业界的关注和应用,如图2.4所示,近年来其发展呈不断上升趋势。
2.4.2 系统架构
混合计算模式可体现在两个层面[9]:一是传统并行计算所关注的体系结构与底层并行程序设计语言层面计算模式的混合,例如,在体系结构层,可根据大数据应用问题的需要搭建混合式的系统架构,如MapReduce集群+GPU的混合,或者MapReduce集群+众核协处理系统的OpenMP/MPI的混合模型。
混合模式的另一个层面是大数据处理高层计算模式的混合。例如,一个大数据应用可能需要提供流式计算模式以便接受和处理大量流式数据;可能还需要提供基于SQL或NoSQL 的数据查询分析能力以便进行日常的数据查询分析;并且可能需要提供线下批处理和迭代计算以完成机器学习的深度数据挖掘分析;一些大数据计算任务可能还涉及到复杂图计算或间接转化为图计算问题等。
因此,很多大数据处理问题将需要混合使用多种计算模式。此外,为了提高计算性能,各种计算模式还可以与内存计算模式混合,实现高实时性的大数据查询和计算分析。混合计算模式将成为满足多样性大数据处理和应用需求的有效手段。混合计算模式集大成者当属UC Berkeley AMPLab(Algorithms,Machines,and People Lab)实验室推出的Spark系统,如图2.5所示,其涵盖了几乎所有典型的大数据计算模式,包括迭代计算、批处理计算、内存计算、流式计算(Streaming Spark)、数据查询分析计算(Shark)以及图计算(Bagel、GraphX)。