MPP 与 Hadoop是什么关系?

Posted 公共安全大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MPP 与 Hadoop是什么关系?相关的知识,希望对你有一定的参考价值。

1. hadoop(hive)跟mpp的本质区别是什么,这个有的时候界限很模糊,比如说存储,如果我把mpp的存储架在hdfs上,那存储模型就没有区别了,所以地下我打算还是用比较传统的认知来作区别。

2. hive跟mpp的存储模型不一样,hive用的hdfs,而mpp需要自己做切分,自己做切分就带来动态调整的问题,hdfs的扩展是通过元数据来做的,他有中心节点用来存元数据,在加入新的节点的时候,只需要修改元数据就可以了,所以hdfs的扩展能力是受到管理元数据那台机器的性能限制的,一般来说可以到10k这个规模,再向上就不行了。但是mpp通常采用的是没有中心节点的存储模型,比如hash,你每次增加节点的时候,都需要rehash,这样当规模到了几百台的时候,扩展能力就下来了。当然,现在可以把存储架在hdfs上,这样在存储上就没有太大区别了。

3. hive跟mpp的内存管理方式不大一样,mpp内存管理比较精细,他主要的想法是在每个机器上放个数据库,传统数据库的内存管理比较复杂,主要是内外存交互的东西,这样的架构决定了mpp在小数据量的时候,latency可以做的比较小,但是在大数据量的时候,throughput做不上去。而hive的内存管理非常粗放,他后来就是mapreduce的job,mr的job是没有太多精细的内存管理的,他就是拼了命地scan,完了顶多就是个spill,这样的架构导致throughput很大,但是latency很高,当你集群规模很大的时候,你一般会追求很大的throughput,当数据量很大的时候,如果你用mpp那种传统的内存管理的话,大批量的计算反而会慢,而且更加占资源,所以vertica这种一开始就考虑了列式存储就是这个道理。

4.事务,你可以认为hive不支持传统意义上的那种高并发的事务,而mpp试图想要支持,一旦你要上分布式事务,基本上你的可扩展性就上不去了,至于为啥,陈皓有一篇文章写的不错,建议看下。hive的ddl是可以多个并发的,但是dml不行,而ddl他是通过传统的数据库去做的,所以这个也是个中心节点,dml不行的话,就决定了他可以在底层跑mr这么重粒度的东西,他跑的时候,会在整个表上面加一把大锁。

5.failover机制,hive的failover就是mr的failover,job挂掉了重新换机器跑就完了,但是mpp如果采用传统架构的话,他的计算是要attach到数据节点上去的,如果你规模上去,那么fail的可能性就上去了,这样如果你每次计算都有台机器挂了,你一挂,别人就要等你,而不是换台机器继续跑,那么这个也限制了可扩展性,当然,如果mpp在底层用了统一的存储,完了计算也可以到处转移,再想个办法把中间状态记录下来,也可以扩展(这个实际上就是sparksql)



MPP架构之间的关系数据库与Hadoop的理论基础是极其相似的,都是将运算分布到节点中独立运算后进行结果合并。个人感觉MPP运行的是Sql,Hadoop底层则处理MapReduce程序,但是我们会经常听到对于MPP而言,虽然说是也可以横行扩展Scale OUT,但是这种扩展一般是到100左右,而Hadoop一般可以扩展1000+,这也是经常被大家拿来区分这两种技术的一个说词。

  这是为什么呢?其实可以从CAP理论上来找到一些理由。因为MPP始终还是DB,一定要考虑C(Consistency),其次考虑 A(Availability),最后才在可能的情况下尽量做好P(Partition-tolerance)。而Hadoop就是为了并行处理和存储设计的,所有数据都是以文件存储,所以优先考虑的是P,然后是A,最后再考虑C。所以后者的可扩展性当然好于前者。

  以下几个方面制约了MPP数据库的扩展

  1、高可用:MPP DB是通过Hash计算来确定数据行所在的物理机器(而Hadoop无需此操作),对存储位置的不透明导致MPP的高可用很难办。

  2、并行任务:数据是按照Hash来切分了,但是任务没有。每个任务,无论大小都要到每个节点去走一圈。

  3、文件系统:数据切分了,但是文件数没有变少,每个表在每个节点上一定有一到多个文件。同样节点数越多,存储的表就越多,导致每个文件系统上有上万甚至十万多个文件。

  4、网络瓶颈:MPP强调对等的网络,点对点的连接也消耗了大量的网络带宽,限制了网络上的线性扩展(想象一台机器可能要给1000台机器发送信息)。更多的节点并没有提供更高的网络带宽,反而导致每个组节点间平均带宽降低。

  5、其他关系数据库的枷锁:比如锁、日志、权限、管理节点瓶颈等均限制了MPP规模的扩大。

  但是MPP数据库有对SQL的完整兼容和一些事务处理功能,对于用户来说,在实际的使用场景中,如果数据扩展需求不是特别大,需要的处理节点不多,数据都是结构化数据,习惯使用传统RDBMS的很多特性的场景,可以考虑MPP如Greenplum/Gbase等。

  但是如果有很多非结构化数据,或者数据量巨大,有需要扩展到成百上千个数据节点需求的,这个时候Hadoop是更好的选择


以上是关于MPP 与 Hadoop是什么关系?的主要内容,如果未能解决你的问题,请参考以下文章

关系型资料库与Hadoop的本质区别在啥地方

MPP架构与Hadoop架构是一回事吗?

MPP架构与Hadoop架构是一回事吗?

MPP架构与Hadoop架构是一回事吗?

Hadoop与MPP数据仓库

初识大数据(三. Hadoop与MPP数据仓库)