Hadoop与MPP


1. Hadoop是分布式计算平台,以hive应用为例,它的存储结构是HDFS,计算框架是MapReduce;MPP代表大规模并行处理,一个优点是可扩展性,数据在节点(分片)之间分割,每个节点只处理其本地数据。

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

由于存储结构导致计算模式不同,Hadoop采用Master-Slaves分配模式,单点故障时可以迅速把计算任务分配给其他节点,但是MPP一旦分配任务就不能调整,当某节点计算速度低下时,全部任务都要等待,所谓的木桶短板,当任务失败时导致整个计算的任务失败。

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)

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



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值