存储 频道

为什么Hadoop一定是分布式计算的未来?

  Hadoop的劣势

  现在Hadoop依然有很多的问题没有解决,这让有些人非常的怀疑Hadoop的未来,这里谈谈Hadoop的一些重要的劣势

  HA(High Availability)高可用性:

  这一点是Hadoop非常弱的一个缺点,不管是Hdfs还是Map-reduce,都是采用单master的方式,集群中的其他机器都是与一台中心机器进行通信,如果这个中心机器挂了,集群就只有不工作了(不一定数据会丢失,但是至少需要重启等等工作),让可用性变得更低。这个一般叫做单点失败(single point of failure,SPOF)。

  虽然现在有些公司已经给出了解决方案,比如EMC就有用Vmware搭建虚拟集群,对master节点进行镜像备份,如果master挂掉,那么立刻换上镜像备份的机器,使其可用性变高,不过这个终究不是一个内置的解决方案,而且Vmware这一套东西也并不便宜。

  不过之后这个问题将会得到非常好的解决,我在Hadoop的未来这一章将说以说。

  Hadoop目前解决得不那么好的一些算法:

  Join等:

  Map-Reduce还有一个问题是,对于Join这个最常见的数据库操作,支持力度还是不够,特别是针对那种上TB的数据,Join将会很不给力,现在已经有了一些解决方案,比如说SIGMOD'2010的这篇文章:

  A Comparison of Join Algorithms for Log Processing in MapReduce

  不过在现在的情况下,只有尽量的避免大数据库的Join操作

  需要进行很多轮迭代、循环的算法:

  对于循环,Map-Reduce稍好,比如矩阵计算,高斯消元法这样的,循环的次数的确定的算法,实现起来还是不难,只是有点慢。但是迭代就更麻烦了,因为现在的Map-Reduce的mapper和reducer是不太方便去弄这样的终止条件。

  还有就是迭代次数较多的算法(比如说矩阵的SVD分解),在超大矩阵的情况下,迭代次数可能会上亿次。而Map-Reduce在每次迭代的时候都会把数据往文件里面读写一遍,这样的浪费的时间是巨大的。

  其实Map-Reduce不是绝对没有办法去解决这些问题,而只是现在这个还不是最重要的日程,Hadoop还有很多很多的东西可以优化,比如说前面提到的HA,这些东西只有往后放放,我将在之后的Hadoop的未来部分,谈谈未来版的Hadoop怎么去解决这些问题。

  编程复杂,学习曲线陡峭:

  对于一般的map-reduce框架,hello world程序就变成了word count,就是给出一堆的文本文件,最终统计出里面每一个不同的单词出现的次数,这样一个简单的任务(可能在linux shell下一行就写出来了),在Map-reduce中需要几十行,一般新人从理解word count到写出自己的word count,到跑通,一个星期是肯定需要的。这样陡峭的学习曲线让许多人难以深入。

  另外还有一点Hadoop被人所诟病的是,代码丑陋,虽然Hadoop是用高级语言Java写成的,但是里面对每一个步骤都要分成mapper和reducer,这个被戏称为新时代的汇编语言。

  一般来说,做数据分析的人程序都写得不咋地(强哥这样的达人除外),能写写matlab,R,或者spss就差不多了,如果要让他们去写map-reduce,那就等于叫他们别干活了。而大数据的重要的作用就是用来做数据分析,Hadoop的未来发展必须得抓住这群数据分析师的心。

  其实现在已经有一些实验中的产品,让用户可以用高级语言编程,不会再看到丑丑的map-reduce了。我在前公司的时候就与团队一起做了还不错的尝试,至少,数据分析师可以用Python来编程了。map-reduce变成了一个底层的东西,现在不是某些人在分析性能的时候就贴上汇编代码吗,之后可能会变成在前段的程序效率不行的时候,就贴上后端Java的map-reduce程序。

  所以对这个难题之后肯定会解决掉,底层分布式程序开发与用户将被清楚的分开,之后想要写word-count一定会像hello world一样简单。

0
相关文章