计算机畛域的很多概念都存在一些传达上的“舛误”。
MPP这个概念就是其中之一。它的“舛误”之处在于,明明叫做“Massively ParallelProcessing(大规模并行处置)”,却让十分多的人拿它与大规模并行处置畛域最驰名的开源框架Hadoop相关框架做对比,这真实是让人困惑——难道Hadoop不是“大规模并行处置”架构了?
很多人在对比两者时,其实并不知道MPP的含意终究是什么、两者的可比性究竟在哪里。实践上,当人们在对比两者时,与其说是对比架构,不如说是对比产品。只管MPP的原意是“大规模并行处置”,但由于一些历史要素,如今当人们说到MPP架构时,它们实践上指代的是“散布式数据库”,而Hadoop架构指的则是以Hadoop名目为基础的一系列散布式计算和存储框架。不过由于MPP的字面意思,事实中还是经常有人纠结两者究竟有什么咨询和区别,两者究竟是不是同一个层面的概念。
这种概念上的模糊不清之所以还在传达,关键是由于疑问技术的人而青睐这些概念的大有人在,所以也并不在意要去廓清概念。“既然散布式数据库是MPP架构,那么MPP架构就等于散布式数据库应该也没什么疑问吧。”于是大家就都不在意了。
不过,作为一个技术人员,还是应该搞分明两种技术的实质。本文旨在做一些概念上的廓清,并从技术角度论述两者同宗同源且会在未来异曲同工。
究竟什么是MPP架构?
MPP架构与Hadoop架构无通常基础上简直是在讲同一件事,即,把大规模数据的计算和存储散布到不同的独立的节点中去做。
有人或者会问:“既然如此,为什么人们不说Hadoop是MPP(大规模并行处置)架构呢?”
关于这个疑问嘛,请先问是不是,再问为什么。
在GreenPlum的官网文档中就写道:“Hadoop就是一种经常出现的MPP存储与剖析工具。Spark也是一种MPP架构。”来看上方的图,更能体会到两者的相似性。
问:这是什么架构?
答:MPP架构。
置信了解过MPP架构的读者对这幅图不会生疏。兴许在不同的散布式数据库产品中,节点角色的称号会有差异,但总体而言都是一个主节点加上多个从节点的架构。
但是,还可以有其余答案,比如MapReduce on Yarn:
这幅图或者大家有些生疏,但只不过是省略了资源调度的简化版MapReduce运转时架构罢了。
当然,还可以有更多答案,如Spark:
人造还可以是Flink:
有人或者会说,只管直观上这些架构长得很像,但是MPP架构中的Master所担任的事件是不是与其余框架不一样?
那么,MPP架构的Master做的什么事呢?它会接纳SQL语句,解析它并生成口头方案,将方案散发到各个节点。那么,这与SparkSQL有区别吗?不只与Spark SQL没有区别,与其余任何Hadoop生态圈相似架构如Hive SQL、FlinkSQL都没有区别。关于非SQL的输入,逻辑也是分歧的,只是没有了解析SQL的步骤,但还是会生成口头图散发到各个节点去口头,口头结果也可以在主节点启动汇总。
不只是在计算上没有区别,存储架构上也没有区别。上方是HDFS的架构图:
所以回到最后说的那句话——MPP架构与Hadoop架构无通常基础上简直是在讲同一件事,即,把大规模数据的计算和存储散布到不同的独立的节点中去做。上方的几幅架构图印证了这一点。
既然MPP架构与Hadoop架构实质上是一回事,那么为什么很多人还要将两者分开探讨呢?咱们或者经常听到这样的话:“这个名目的架构是MPP架构。”这仿佛无心在说:“这可不是Hadoop那一套哦。”
这就与MPP架构的历史有相关。只管从通常基础上两者是一回事,但是MPP架构与Hadoop架构的开展却是走的两条路途。MPP架构只管也是指的“大规模并行处置”,但是由于提出者是数据库厂商,所以MPP架构在很多人眼中就成了“散布式数据库”的代名词,它处置的也都是“结构化”的数据,经常作为企业数据仓库的处置方案。而Hadoop生态圈是根正苗红随同着“大数据”兴起而开展起来的概念,它所要处置的是大规模数据量的存储和计算,它的提出者也并非数据库厂商,而是有着C端数据的互联网企业。因此Hadoop架构只管也处置“大规模并行处置”,但没有了数据库那一套物品的限度,处置的也大多是“非结构化”的数据(人造在最后阶段也少了相关的提升)。当然,Hadoop生态圈也要思索“结构化”的数据,这时Hive就成了Hadoop生态圈的数据仓库处置方案。但是,Hadoop、Spark等框架的通常基础与散布式数据库依然是一样的。
狭义上讲,MPP架构是一种更上档次的概念,它的含意就是字面含意,但是它自身并没有规则如何去成功。Hadoop相关框架和各个散布式数据库产品则是详细的成功。狭义上讲,MPP架导致了散布式数据库这种体系架构的代名词,而Hadoop架构指的是以Hadoop框架为基础的一套生态圈。
本文并不想仅仅从较上档次的架构设计来说明两者是一回事,这样还是不足压服力。上方,咱们从散布式计算框架中最关键的环节——Shuffle——来展现两者更多的相似性。
数据重分区
Shuffle是散布式计算框架中最关键的概念与环节之一。在MPP架构(散布式数据库)中,这个数据重分区的环节与Hadoop相关框架在计算中的数据重分区环节也是分歧的。
无论是HadoopMapReduce,还是Spark或Flink,由于业务的需求,往往须要在计算环节中对数据启动Hash分区,再启动Join操作。这个环节中不同的框架会有不同的提升,但是归根究竟,可以总结为两种形式。
其中一种形式就是直接将两个数据源的数据启动分区后,区分传输到下游义务中做Join。这就是普通的“Hash Join”。
另一种形式是,当其中一个数据源数据较少时,可以将该数据源的数据散发到一切节点上,与这些节点上的另一个数据源的数据启动Join。这种形式叫做“BroadcastJoin”。它的好处是,数据源数据较多的一方不须要启动网络传输。
以上是Hadoop相关框架的成功。上方用一个详细的例子来看MPP架构对这一环节的思索。
在MPP架构中,数据往往会先指定分区Key,数据就依照分区Key散布在各个节点中。
如今假定有三张表,其中两张为大表,一张为小表:
很人造地,订单表会选用订单ID用做分区Key,产品表会选用产品ID作为分区Key,客户表会选用客户ID作为分区Key。给这些表中减少一些数据,并且口头一个查问语句:
首先,订单表要与客户表做Join,JoinKey是客户ID。这种操作在Hadoop生态圈的散布式计算框架中,相当于对两个表做了Hash分区的操作。不过由于客户表曾经依照客户ID提早做好了分区,所以这时只须要对订单表做重分区。在MPP架构中,会发生如下的结果:
此时,订单表整个表的数据会出现重分区,由此发生网络IO。这种状况相当于Hadoop架构中的“Hash Join”。
接着,须要让结果与产品表依照产品ID做Join。这时,由于之前发生的结果的分区Key不是产品ID,看起来又须要将整个数据启动重分区。不过,留意到产品表是个小表,所以此时只须要将该表广播到各个节点即可。结果如下:
在这个环节中,就只要小表的数据出现了网络IO。这就相当于Hadoop架构中的“Broadcast Join”。
两者还有区别吗?
前文在MPP架构的概念、历史以及技术细节上与Hadoop架构做了对比,了解到了两者一些极为相似的中央,而且在狭义上讲,Hadoop就是MPP架构的一种成功。
但是前文也讲到,由于传达上的舛误,如今人们说到MPP架构,关键指的是散布式数据库,它处置的是结构化的数据,而Hadoop生态圈是由“大数据”这套概念开展而来,最后处置的都是非结构化的数据。以此为登程点,两者究竟在开展环节中发生了多大的区别呢?
对比的维度有很多,比如很多人会说,MPP架构的平台敞开、领有成熟的人才市场,而Hadoop架构平台放开、人才专业培训较少等。但这些并不是实质的区别。这里还是以技术目的作为维度来启动对比。
技术角渡过去讲,MPP产品最大的长处是作业运转期间更快。这不难了解,由于MPP产品处置的都是结构化数据,自身就是从数据库开展而来,领有极为复杂的提升器对作业启动提升。这些提升器是各厂商最有价值的商业秘密,人造是开源产品不能比的。不过另一个角度来看,这也是MPP产品相比于Hadoop相关产品不够灵敏的中央——它只能处置结构化数据。
有人说MPP产品能够处置的数据量没有Hadoop架构大。这种说法并不准确。Hadoop架构之所以能处置更少量的数据,其中一个要素是配件老本较低,裁减愈加的繁难。实践上,经过精心设计的MPP架构照样可以处置PB及以下级别的数据。有人说,MPP产品不能处置大规模数据,是由于元数据的量十分渺小。其实,雷同的疑问也存在于Hadoop相关框架中。另一方面,Hadoop相关框架能处置多少量的数据,与详细的成功有很大相关。假设领有足够的资金可以对MPP产品启动裁减,而Hadoop相关产品咱们又用基于内存的计算,那么,对比的结果必定是MPP产品能够应答更大的数据量。假设非要从数据量这一维度来做对比,或者反而是Hadoop相关产品对小数据量更有长处。比如想要存储一个极小的表,MPP产品兴许会依据分区Key将其拆分到100个节点中去,而HDFS用一个文件块存储就够用了。
未来开展
前面讲到MPP产品对结构化数据的计算和存储都更有效率。其中一局部提升就包含了存储时的“列存储”技术,查问时的“CBO提升”等等。这些都是Hadoop生态圈一开局比拟不足的技术。但是随着这些年的开展,这些技术早就融入到了Hadoop生态圈中,Hive、Spark框架的提升技术也越做越好,由此与MPP架构的技术差距也越来越小,甚至有笼罩的趋向。从最**的技术过去看,两者未来只会越来越像。可以预测,Hadoop架构的市场会越来越大。
不过,散布式数据库产品在安保性等方面依然提供着更成熟的处置方案,这是开源产品短期间内不可逾越的。因此,“MPP架构”这个概念依然会在政府、传统企业中常年占有一席之地。
戳这里,看该作者更多好文