关注:工众号;数元斋

随着云计算、大数据产业的不断发展,传统使用单机数据库进行数据存储的模式已经不能满足业界日益增长需求,海量数据处理成为一个关键问题。目前主流的海量数据处理架构分为两种:1基于传统数据库及数据仓库所衍生出的MPP(MassivelyParallelProcessing)架构;2基于Hadoop并行计算框架的分布式架构。

传统关系型数据库随着数据量增长性能急剧下降,业界提出一种横向扩展(scaleout)方式,通过增加节点使用更多廉价的机器构建更强的集群系统。

在这种背景下,分布式数据库和数据仓库越来越受到重视,其中基于MPP架构的数据库是主流解决方案,越来越多的厂商选择使用它改造和升级原有软件系统。Hadoop是一种分布式数据处理框架,使用普通X86计算机组成分布式系统处理海量数据及进行大数据分析。Hadoop架构近年伴随着云计算而兴,其生态系统和大数据紧密联系在一起,不仅仅因为它是开源系统,更主要的是它形成了一个完整的技术生态圈。

混合架构则综合了MPP架构和Hadoop架构各自特点,通过混合部署将各自的优点充分发挥出来。将Hadoop生态系统与ETL、Spark处理引擎一起使用,结合基于MPP的海量并行处理数据库(MPP)实现银行综合风险管理系统,具有更好的性能;基于MPP-Hadoop混合框架构建一套融合多种不同结构数据的数据集成系统,提升了数据查询和加载效率。同时,混合架构案例近年得到长足发展。

本文对MPP和Hadoop两种架构进行深入分析,并对比各自优缺点以及适用范围,给出不同类型应用的技术架构选型推荐方案。

1基于MPP的数据处理架构

MPP指处于不同部分的多个处理器对程序进行协同处理的过程,每个处理器使用自己的操作系统、内存、总线和磁盘等,如图1所示。通常MPP处理器使用某些消息传递接口进行通信。在某些实现中,同一应用程序最多可以使用200个或更多处理器,这种结构最大的特点在于共享资源。

MPP数据库(MPPDB)基于MPP架构,通过并行化各种操作提高性能,如加载数据、构建索引以及使用并行的多个CPU和磁盘等。

MPP数据库通常具有无共享架构,因为每个系统都有自己的CPU、内存和磁盘。通过数据库软件和高速互连,系统可以整体运行,并且可通过添加新服务器对集群进行扩展。MPP数据库通常比托管在大型多处理器服务器上的传统RDBMS更灵活,可伸缩且更具成本优势,可提供快速的交互式查询响应,如图所示。这种架构特征是任务并行执行、数据分布式存储(本地化)、分布式计算、资源私有、可横向扩展等。

1.1MPP数据库集群架构

MPP数据库集群架构分为以下两种架构:

(1)有专职Master。Master节点的主要功能是作为系统访问入口,对存储在系统中的元数据进行管理,以及实现SQLParser,生成执行计划和任务调度等。Master有两个节点,会进行数据同步,在出现故障时可切换。典型产品有Greenplum、AsterData、ParAccel、Hawg等。

(2)无专职Master。Master节点和数据节点共享一台物理机,先连接上的节点会作为系统的Master。典型产品有Gbase8a、Vertica、Teradata、DB2、Impala、IBMBigSQL、HPDragonRed、VerticaVIVE等。

1.2MPP架构选择

两种架构各有优缺点,在超大规模分布式集群中,第2种架构更有优势,可演变为“多master”架构(如Gbase8a和Vertica集群)。此种架构下,通过Zookeeper等分布式一致性软件协调多个master,提供高可用性、透明性以及扩展性,同时数据节点具有对等性。

2基于Hadoop架构的数据处理框架

2.1Hadoop数据分块

Hadoop架构与MPP架构相似,下图显示Hadoop处理数据过程。名称服务器(NameNode)充当目录查找服务。Hadoop将数据分成任意块,大小一般设为128Mb,将其复制到至少两个其它节点以实现分布式存储。小文件(小于128Mb的文件)完全保存在单个节点上,甚至1G大小的文件也只需要分布在8个节点(加上副本)上。因此,Hadoop可处理非常大的数据集。

由于小表格分布在较少服务器上,因此对于50~100Gb以下的数据文件不是理想选择。在Hadoop上处理小数据集是一个挑战,因为在某些情况下,单个节点上处理数据完全按顺序运行而不是并行运行。许多Hadoop集群倾向于使用大量相对较慢且价格便宜的服务器,因此小数据性能可能较差。此外,随着小文件数量增加,名称服务器管理问题会越来越多。经验表明,在大多数中型数据仓库平台(大约10Tb的数据)上只有大约10%的表拥有超过100Gb的数据,而70%的表不足1Gb数据。即使两个最大的表超过1Tb,对于在Hadoop上部署也不是很有利。

2.2Hadoop集群架构

Hadoop处理框架包括3个模块:HDFS、MapReduce和YARN。

(1)HDFS是一个分布式文件系统,用于将单个集群扩展到数百个甚至数千个节点,具有高度的容错能力,部署在低成本硬件上。HDFS提供应用程序高吞吐量数据访问,适用于具有大数据集的应用程序。

(2)MapReduce是一个软件框架,以高可靠性、高容错方式并行处理大型集群(数千个节点)上的海量数据(多TB数据集)。MapReduce作业通常将输入数据集拆分为独立的块,这些任务以完全并行的方式进行处理。

(3)YARN:Hadoop集群资源管理主要依靠资源管理器(YARN)提供细粒度的资源管理。MapReduce作业不需要并行运行所有计算任务,因此可以处理大量的计算任务,具有可扩展性及支持长寿命容器等功能,但它比MPP资源管理器要慢,有时对于并发性管理支持不是很好。

2.3Hadoop数据查询

Hadoop的SQL接口有多种工具供选择,包括MR/Tez/Spark上运行的Hive、SparkSQL、Impala、HAWQ或IBMBigSQL。

(1)Hive将SQL查询转换为MR/Tez/Spark作业并在集群上执行。所有作业均基于相同的MapReduce概念构建,提供良好的集群利用率,以及与其它Hadoop堆栈技术的良好集成。缺点是执行查询延迟大,尤其表连接性能较低,没有查询优化器(至少目前是这样),因此即使是最不合理的查询引擎也会执行操作。

(2)SparkSQL是介于MapReduce和MPP-over-Hadoop方法之间的一种工具,兼顾两者优点。与MapReduce相似,将工作分解为一组单独计划任务以提供更好的稳定性。在执行阶段之间进行流式传输数据以加快处理速度,使用类似MPP中的固定执行程序概念减少查询延迟。

(3)混合方案如Impala和HAWQ类的解决方案,是Hadoop之上的MPP执行引擎,可处理HDFS中存储的数据。与其它MPP引擎一样,可提供更低的延迟和更少的查询处理时间,但代价是可伸缩性和稳定性较低。

3Hadoop与MPP架构选择

3.1节点架构

(1)底层数据库。MPP底层运行的是SQL引擎,而Hadoop底层处理是MapReduce程序。(2)扩展程度。MPP虽然支持横向扩展,但一般只支持扩展到百个节点级别,Hadoop则可以扩展到千个节点级别。

基于Hadoop框架的数据平台可看作是新一代的分布式数据仓库产品,而MPP数据库会应用与大数据类似的解决方案。针对不同使用场景,其发挥的作用和给用户带来的体验也不同。

MPP和Hadoop平台互为补充,分别用于不同场景。MPP用于高端数据库产品,Hadoop可部署到普通X86集群。MPP和Hadoop底层支持的硬件不同,Hadoop控制机制大多通过Java代码实现,而MPP产品则通过SQL进行查询。Hadoop的子项目“Hive”本质上也是通过MapReduce提供SQL抽象。在许多情况下,与编写MapReduce作业相比,SQL更容易且生产率更高,具有SQL技能的数据库专业人员比Hadoop专家更多且成本更低。

3.2CAP理论

CAP定理(CAPtheorem)又称布鲁尔定理(Brewer’stheorem),在理论计算机科学中指一个分布式系统最多只能满足以下3个特征中的两个:1一致性(Consistency):同一时间系统中所有的节点都具有相同的数据值;2可用性(Availability):系统中即使一个或多个节点发生故障,客户端的任何请求仍将获得响应;3分区容忍性(Partitiontoler⁃ance):即使系统节点之间发生许多通信故障,集群也必继续工作。

CAP理论是MPP架构扩展性弱的原因,因为MPP数据库设计仍然以数据查询为主要目的,首先考虑一致性,其次考虑可用性,最后在可能的情况下考虑分区容忍性。而Hadoop是为并行处理与存储设计的,所以数据均以文件存储,有限考虑分区容忍性,然后考虑可用性,一致性则最后考虑,所以可靠性上Hadoop要优于MPP。

3.3数据扩展制约性

(1)高可用。MPP数据库通过将哈希算法应用于分配键列值,在数据切片之间确定数据存储的物理机器,而Ha⁃doop则是通过数据分块实现分布式存储,因而Hadoop可用性更强。

(2)并行任务。虽然MPP是根据Hash切分数据的,但是它的任务没有切分,因此任务都会在每个节点上运行一次。(3)文件系统。在MPP数据库中,虽然数据被切分了,但文件数量并未减少,每个表在节点上有一个或多个文件。存储的表越多节点数就越多,导致系统存储过多文件。

(4)网络瓶颈。MPP数据库大多使用对等节点架构,对等的点对点连接消耗大量网络宽带,限制系统线性扩展。Hadoop使用主从节点架构,在线性扩展上强于MPP。

(5)其它关系数据库限制。关系型数据库中的锁机制、日志系统、权限管理、节点管理等瓶颈均限制MPP规模扩大,而Hadoop没有使用关系型数据库,并且有专用的分布式一致性管理软件,因此这些性能要优于MPP。

3.4技术选择

Hadoop架构数据存储、传统数据仓库、MPP数据库技术性能及适用场景对比如表2所示。

因此,Hadoop和MPP两种技术应根据具体业务以及场景进行选择。

(1)对于半结构化和非结构化数据,Hadoop在处理上比MPP有一定优势,适合于海量数据批处理类应用,如海量数据ETL、非结构化数据分析与挖掘(关键词提取、情感分析等)。若系统对非结构化数据存储需求较大且数据量巨大,需要动态扩展数据节点等,则使用Hadoop架构更为合适。

(2)MPP架构更适合对现有关系型数据库和数据仓库系统进行升级或替换,其在数据查询类业务上比Hadoop更具优势,适合处理SQL类事务请求、多维度数据分析、展示数据报表等。若大部分存储数据是结构化数据,数据量不是很大,未来不会爆炸式增长,或业务人员习惯使用SQL场景,则可优先考虑使用MPP数据库。

(3)MPPDB+Hadoop混合架构是未来海量数据处理发展趋势。用MPP处理PB级结构化数据存储与查询,提供完整的SQL与事务支持功能。用Hadoop处理半结构化、非结构化数据,提供灵活的自定义模型与算法开发能力,同时满足多种数据类型处理需求,并在实时查询与离线分析上都能提供较高性能。但MPP+Hadoop混合架构开发成本及维护成本可能较高。

在数据爆炸时代,传统的数据库架构处理系统已经不能满足行业需要。本文从理论及应用角度将两种主流的海量数据处理架构MPP和Hadoop进行对比,分析各自的技术特点,论述它们与传统数据处理的优势。通过分析两大框架底层核心技术,对其优缺点进行了归纳。Hadoop对海量半结构化、非结构化数据存储与处理有一定优势,但在处理速度和易用性上不及MPP。Hadoop灵活性较强,企业可根据自身业务特点进行定制开发。MPP优势在海量结构化数据处理、响应性能和衍生工具等方面,适用于查询业务场景较多的项目。随着Hadoop生态圈的不断发展,如Hadoop的SQL性能提升、BI工具的不断丰富,MPP技术发展会向Hadoop靠拢。基于MPP与Hadoop框架并结合Spark内存计算、流计算等技术的混合架构平台,会成为大型数据处理项目的理想选择。

关注公号;数元斋私聊我

了解更多数字化咨询与知识!