大数据技术基础:基于Hadoop与Spark
上QQ阅读APP看书,第一时间看更新

1.3 大数据的存储与计算模式

大数据时代的出现,简单地说,是海量数据同完美计算能力结合的结果;准确地说,则是移动互联网、物联网产生了海量的数据,大数据计算技术完美地解决了海量数据的收集、存储、计算、分析的问题。本节将详细介绍大数据的存储与处理模式。

1.3.1 大数据的存储模式

1.大数据存储问题与挑战

大数据存储系统面临的挑战主要来自以下3个方面。

● 存储规模大,通常达到 PB(1 000 TB)甚至 EB(1 000 PB)量级。

● 存储管理复杂,需要兼顾结构化、非结构化和半结构化的数据。

● 数据服务的种类和水平要求高。换言之,上层应用对存储系统的性能、可靠性等指标有不同的要求,而数据的大规模和高复杂度放大了达到这些指标的技术难度。

这些挑战在存储领域并不是新问题,但在大数据背景下,解决这些问题的技术难度成倍提高,数据的量变终将引起存储技术的质变。

大数据环境下的存储与管理软件栈,需要对上层应用提供高效的数据访问接口,存取 PB甚至 EB 量级的数据,并且能够在可接受的响应时间内完成数据的存取,同时保证数据的正确性和可用性;对底层设备,存储软件栈需要高效的管理存储资源,合理地利用设备的物理特性,以满足上层应用对存储性能和可靠性的要求。在大数据带来的新挑战下,要完成以上这些要求,需要更进一步地研究存储与管理软件技术。

2.大数据存储的关键技术

大数据存储的关键技术有以下4个。

(1)分布式文件系统

分布式文件系统所管理的数据存储在分散的存储设备或节点上,存储资源通过网络连接形成存储集群。其核心技术主要有以下5个。

① 高效元数据管理技术。在大数据应用中,元数据的规模也非常大,元数据的存取性能是整个分布式文件系统性能的关键。常见的元数据管理可以分为集中式和分布式元数据管理架构。集中式元数据管理架构采用单一的元数据服务器,其优点是实现简单,但存在单点故障等问题。分布式元数据管理架构则将元数据分散在多个节点上,从而解决了元数据服务器性能瓶颈问题,提高了可扩展性,但实现复杂,同时还要解决元数据一致性的问题。此外,还有一种无元数据服务器的分布式架构,使用在线算法组织数据,不需要专用的元数据服务器。但是该架构对数据一致性的保证很困难,实现复杂。另外,文件目录遍历操作的效率低下,并且缺乏文件系统全局监控管理功能。

② 系统弹性扩展技术。在大数据环境下,数据规模和复杂度的增加往往非常迅速,因此其存储系统必须提供按需扩展的功能。实现存储系统的高可扩展性首先要解决两个方面的重要问题,即元数据的分配和数据的透明迁移。前者主要通过静态子树划分和动态子树划分技术实现,后者则侧重数据迁移算法的优化。此外,大数据存储系统规模庞大,节点失效率高,因此还需要实现一定程度上的自适应管理功能。系统必须能够根据数据量和计算的工作量估算所需要的节点个数,并动态地将数据在节点间迁移,以实现负载均衡;同时,节点失效时,数据必须可以通过副本等机制进行恢复,不能对上层应用产生影响。

③ 存储层级内的优化技术。在构建存储系统时,需要基于成本和性能来考虑,因此存储系统通常采用多层不同性价比的存储器件组成存储层次结构。大数据由于规模大,因此构建高效合理的存储层次结构,可以在保证系统性能的前提下,降低系统能耗和构建成本。利用数据访问局部性原理,可以从两个方面对存储层次结构进行优化。从提高性能的角度,可以通过分析应用特征,识别热点数据并对其进行缓存或预取,通过高效的缓存预取算法和合理的缓存容量配比来提高访问性能。从降低成本的角度来看,采用信息生命周期管理方法,将访问频率低的冷数据迁移到低速廉价存储设备上,可以在小幅牺牲系统整体性能的基础上,大幅降低系统的构建成本和能耗。

④ 针对应用和负载的存储优化技术。传统数据存储模型需要支持尽可能多的应用,因此需要具备较好的通用性。大数据具有大规模、高动态及快速处理等特性,通用的数据存储模型通常并不是最能提高应用性能的模型,而大数据存储系统对上层应用性能的关注远超过对通用性的追求。针对应用和负载来优化存储,就是将数据存储与应用耦合,简化或扩展分布式文件系统的功能,根据特定应用、特定负载、特定的计算模型对文件系统进行定制和深度优化,使应用达到最佳性能。

⑤ 针对存储器件特性的优化技术。随着新型存储器件的发展和成熟, Flash、PCM 等逐渐开始在存储层级中占据一席之地,存储软件栈也随之开始逐渐发生变化。以 Flash 为例,起初各厂商通过闪存转换层 FTL 对新型存储器进行封装,以屏蔽存储器件的特性,适应存储软件栈的现有接口。但是随着 Flash 的普及,产生了许多针对应用对 FTL 进行的优化,以及针对 Flash 特性进行定制的文件系统,甚至有去掉FTL这层冗余直接操作Flash的存储解决方案。传统的本地文件系统,包括分布式文件系统,是否能够与新型存储器件耦合,最大程度地利用这些存储器件新特性上的优势,需要存储软件开发者重新审视存储软件栈,去除存储软件栈的冗余,甚至需要修改一些不再合适的部分。

(2)分布式数据库

大数据时代,企业对数据的管理、查询及分析的需求变化促生了一些新技术的出现。需求的变化主要集中在数据规模的增长,吞吐量的上升,数据类型以及应用多样性的变化。数据规模和吞吐量的增长需求对传统的关系型数据库管理系统在并行处理、事务特性的保证、互联协议的实现、资源管理以及容错等各个方面带来了很多挑战。为此,在分布式文件系统的基础之上发展出了分布式数据库技术。

① 事务性数据库技术。这种技术以NoSQL(即Not Only SQL)为代表。NoSQL系统通过放弃对事务 ACID 语义的方法来增加系统的性能以及可扩展性,具有以下几个特征。

● 支持非关系数据模型,例如采用键值存储等。

● 简单操作往往不支持SQL。

● 具备在多个节点中分割和复制数据的能力。

● 用最终一致性机制解决并发读操作与控制问题。

● 充分利用分布式索引和内存提高性能。

采用NoSQL技术的代表性系统包括 BigTable、Dynamo、HBase、Cassandra、MongoDB。

② 分析型数据库技术。自从MapReduce被Hadoop开源实现之后,Hadoop广受欢迎。目前,在大数据领域涌现出了很多针对Hadoop的SQL分析引擎,代表性系统包括Hive、Impala等。其中,Hive是一个基于MapReduce的SQL引擎。Hive提供了一个类似SQL的查询语言(称为HQL)。Hive的基本原理是接受HQL,解析HQL,然后把HQL语句翻译成多个MapReduce的任务,通过MapReduce来实现基本的类似SQL操作。

(3)大数据索引和查询技术

随着数据量、数据处理速度和数据多样性的快速发展,大数据存储系统不但要处理已有的大数据,还要能快速地处理新数据,这就催生了满足大数据环境需要的索引和查询技术。分布式是处理大数据的一个基本思路,这同样适用于大数据索引和查询。分布式索引把全部索引数据水平切分后存储到多个节点上,这样可以有效避免单个节点构建索引的效率瓶颈问题。当业务增长,需要索引更多的数据或者更快地索引数据时,可以通过水平扩展增加更多的节点来解决。切分索引数据时要注意数据分布的均匀性,要避免大量索引数据分布到一个或者几个节点上,否则无法达到负载均衡的目的。与分布式索引对应的就是大数据的分布式查询。所有节点或者部分节点的查询结果由主节点或者查询节点进行汇总,然后得到最终结果。

(4)实时流式大数据存储与处理技术

实时流式大数据的处理与分布式系统在原理上有很多相似之处,但也有其独特需求。

① 数据流加载。实时流式大数据系统中,数据通常以流的方式进入系统,如何高效且可靠地将数据加载到大数据存储系统,成为了流式大数据系统实现低延迟处理的基础。此外,能够重新处理数据流中的数据也是一个很有价值的特性。

② 复杂事件处理。数据流中的数据源是多种多样的,数据的格式也是多种多样的,而数据的转换、过滤和处理逻辑更是千变万化,因而需要强大而又灵活的复杂事件处理引擎来适应各种场景下的需求。

③ 高可用性。数据通过复杂处理引擎和流计算框架时,通常会经过很多步骤和节点,而其中任何一步都有出错的可能,为了保证数据的可靠性和精准投递,系统需要具有容错和去重能力。

④ 流量控制和缓存。整个流系统可能有若干个模块,每个模块的处理能力和吞吐量差别很大,为了实现总体高效的数据处理,系统需要具备对流量进行控制和动态增加和删除节点的能力。当数据流入大于流出的速度时,还需要有一定的缓存能力,如果内存不足以缓存快速流入的数据时,需要能够持久化到存储层。

1.3.2 大数据的计算模式

1.大数据计算问题与挑战

人们总是希望有统一的、标准的大数据计算模式,因为有了它,将更加有力地推动大数据技术的应用与发展。所谓大数据计算模式,就是根据大数据的不同数据特征和计算特征,从多样性的大数据计算问题和需求中提炼并建立的各种抽象或模型(model)。然而,现实世界中的大数据处理问题复杂多样,难以用一种单一的计算模式来满足所有不同的大数据计算需求。例如, MapReduce更适合进行线下大数据批处理,而不适合解决低延迟和具有复杂数据关系与复杂计算的大数据问题。

传统的并行计算方法主要从体系结构和编程语言的层面定义了一些较为底层的并行计算模型,但由于大数据处理问题具有很多高层的数据特征和计算特征,因此传统的并行计算方法面临挑战,其必须结合这些高层特征来定义更高层的并行计算模式。

(1)数据结构特征。从数据结构来看,大数据的数据结构可分为结构化的大数据、半结构化的大数据和非结构化的大数据。在实际应用中,以非结构化为主(如大量的 Internet 站点的日志数据)。

(2)并行计算体系结构特征。由于大数据的存储通常采用基于集群的分布式存储,与之对应的大数据的计算处理则必须采用并行计算体系结构。目前,大数据的并行计算结构主要有两种:一种是以分布式文件系统为基础的并行计算模式(以Hadoop的MapReduce为代表);另一种是以分布式内存缓存为基础的并行计算模式(以Spark为代表)。

大数据的上述两种高层特征决定了不同的大数据处理方式,主要有以下5种分类方法。

(1)数据获取处理方式。按照数据获取方式,大数据处理可分为批处理与流式计算。

(2)数据处理类型。从数据处理类型来看,大数据处理可分为传统的查询分析计算和复杂的数据挖掘分析计算。

(3)实时响应性能。根据数据计算的响应速度,大数据处理可分为实时计算和非实时计算,有些地方又分为联机计算(online)和脱机计算(offline)。

(4)迭代计算。根据任务的执行流程,大数据处理可分顺序计算和迭代计算。现实的数据处理中有很多计算问题需要大量的迭代计算,为此所采用的计算模式必须具有高效的迭代计算能力。

(5)数据关联性。当数据关系比较简单时,可使用MapReduce先进行映射转换(即map)再进行合并汇总(即reduce)的计算模式。但是对于社会网络应用场景,数据关系异常复杂,此时必须采用图结构的计算模式。

2.大数据计算的关键技术

不同的大数据的计算模式产生了不同的大数据计算技术,见表1-1。

表1-1 典型大数据计算模式与系统

(1)大数据查询分析计算模式与技术

当数据规模的增长已大大超过了传统的关系数据库的承载和处理能力时,可以使用分布式数据存储管理和并行化计算方法,大力发展大数据查询分析计算技术。这种技术提供了面向大数据存储管理和查询分析的能力。为了满足企业日常的经营管理需求,大数据查询分析计算技术必须解决在数据量极大时如何提供实时或准实时的数据查询分析能力这一难题。能否达到关系数据库处理中小规模数据时那样的秒级响应性能,将决定大数据查询分析计算技术的成败。目前,具备大数据查询分析计算模式的典型系统有Hadoop下的HBase和Hive,Facebook开发的Cassandra, Google公司的Dremel,Cloudera公司的实时查询引擎Impala。此外,为了实现更高性能的数据查询分析,还出现了基于内存的分布式数据存储管理和查询系统,包括Berkeley AMPLab的Spark数据仓库Shark,SAP公司的Hana等。

(2)批处理计算模式与技术

最适合于完成大数据批处理的计算模式是MapReduce。MapReduce是一个单输入、先映射转换(map)后合并汇总(reduce)的数据处理过程。首先,MapReduce对具有简单数据关系、易于划分的大规模数据采用分而治之的并行处理思想;然后将大量重复的数据记录处理过程总结成map和reduce两个抽象的操作;最后,MapReduce提供了一个统一的并行计算框架,把并行计算所涉及的诸多系统层细节都交给计算框架去完成,因此大大简化了程序员进行并行化程序设计的负担。

MapReduce的简单易用性使其成为了目前大数据处理领域最为成功、最广为接受和使用的主流并行计算模式。在开源社区的努力下,目前包含MapReduce的Hadoop系统已发展成为非常成熟的大数据处理平台,已构建起了一个包括众多数据处理工具和环境的完整的生态系统。目前国内外的主要IT企业都在使用Hadoop平台进行企业内大数据的计算处理。

(3)流式计算模式与技术

流式计算是一种高实时性的计算模式,需要在规定的时间窗口内完成新数据的实时计算与处理,避免造成数据堆积和丢失。对于诸如电信、电力、道路监控等行业应用,以及互联网行业的日志处理来说,它们都同时具有高流量的流式数据和大量积累的历史数据,因此在提供批处理计算的同时,系统还需要具备高实时性的流式计算能力。流式计算的一个显著特点是数据在流动而运算不能移动,不同的运算节点常常绑定在不同的服务器上。目前,具备流式计算模式的典型系统有Facebook的Scribe和Apache的Flume(它们可实现日志数据流处理)。更通用的流式计算系统是Twitter公司的Storm和Berkeley AMPLab 的Spark Steaming。

(4)迭代计算模式与技术

为了克服Hadoop MapReduce难以支持迭代计算的缺陷,人们对Hadoop MapReduce进行了改进。例如,Hadoop把迭代控制放到MapReduce作业执行的框架内部,并通过循环敏感的调度器保证前次迭代的reduce输出和本次迭代的map输入数据在同一台物理机上,以减少迭代间的数据传输开销;MapReduce在这个基础上保持map和reduce任务的持久性,规避启动和调度开销;而Twister在前两者的基础上进一步引入了可缓存的Map和Reduce对象,利用内存计算和pub/sub网络进行跨节点数据传输。

目前,一个具有快速和灵活的迭代计算能力的典型系统是Berkeley AMPLab的Spark,它采用了基于分布式内存的弹性数据集模型来实现快速的迭代计算。

(5)图计算模式与技术

社交网络、Web链接关系图等都包含大量具有复杂关系的图数据,这些图数据规模常达到数十亿的顶点和上万亿的边数。这样大的数据规模和非常复杂的数据关系,给图数据的存储管理和计算分析带来了很大的技术障碍。为此,需要引入图计算模式。

大规模图数据处理首先要解决数据的存储管理问题,通常大规模图数据也需要使用分布式存储方式。但是,由于图数据的数据关系很强,分布存储就带来了一个重要的图分区问题。在有效的图分区策略下,大规模图数据得以分布存储在不同节点上,并在每个节点上对本地子图进行并行化处理。与任务并行和数据并行的概念类似,由于图数据并行处理的特殊性,人们提出了一个新的“图并行”的概念。目前,提供分布式图计算的典型系统包括Google公司的Pregel,Facebook对Pregel的开源实现Giraph,微软的Trinity,Berkeley AMPLab 的 Spark的GraphX,CMU的GraphLab以及由其衍生出来的目前性能最好的图数据处理系统PowerGraph。

(6)内存计算模式与技术

Hadoop的MapReduce是为大数据脱机批处理而设计的,它在分布式的文件系统之上实现大数据处理,它的主要缺陷是由于频繁的磁盘 IO 读写操作而降低了计算性能。随着大量需要高响应性能的大数据查询分析计算问题的出现,MapReduce往往难以满足要求。随着内存价格的不断下降以及服务器可配置的内存容量的不断提高,用内存计算完成高速的大数据处理已经成为大数据计算的一个重要发展趋势。Spark则是分布内存计算的一个典型的系统,SAP公司的Hana就是一个全内存式的分布式数据库系统。