hadoop思维:HDFS和MapReduce

来源:互联网 发布:java创建多线程数组 编辑:程序博客网 时间:2024/06/05 06:43

       “大量的数据胜于好的算法”。但当我们拥有了大量的数据之后,会面临更大的问题,那就是数据的存储与分析。如何对自己所拥有的数据进行高效的存储?如何将用于小数据的分析算法在大数据上施展身手?这些问题会让很多研究者束手无策。

       “古代,人们用牛来拉重物。当一头牛拉不动一根圆木时,他们不曾想过培育更大更状的牛。同样,我们也不需要尝试开发超级计算机,而试着结合使用更多计算机系统”——格雷斯*霍珀。

       首先我们来讨论下数据存储,条件是你已经有了很大量的数据。1990年,你拥有1GB的数据,那么你可以存储在容量为1370MB的普通磁盘上;20年之后,你拥有了1TB的数据,那么你可以存储在容量为1TB的普通磁盘上。你会很开心呀,我的数据都可以存下来了呀。但是,问题出现了,出现在磁盘数据的读取速度上。1990年,磁盘的访问速度为:4.4MB/S;20年之后,磁盘的访问速度为100M/S。1990年,你读取你所有的数据需要5分钟,而20年之后,你读取你所有的数据却需要2.5小时。你会吃惊吗?


        读取一个磁盘中所有的数据需要更长的时间,写就不用提了。那么我们换种方式想一下,如果我们拥有100个磁盘,每个磁盘只存储10G(1%)的数据,并行读取,我们不到两分钟就可以读完所有数据,哇塞,好厉害呀有没有!!!但是这样,好浪费呀,有钱人才这么玩吧。其实,不然,这100个磁盘,我们可以存储100TB的数据,只要我们拥有100个1TB的数据集就OK啦。重点是我们要实现共享磁盘的访问。可以想象,该类系统的用户会很乐意使用磁盘共享访问以便缩短数据分析时间;并且,从统计角度来看,用户的分析会在不同的时间进行,所以相互之间的干扰不会太大。这几句可以忽略。

      这个解决方案好牛逼呀,可牛逼的同时,也牛气哄哄了。更多的问题来了。说先第一个问题就是:

1、硬盘故障。一个硬盘死了,所有数据都死翘翘了,不是一个完整的数据集,你叫我怎么用呀。常见的做法就是备份备份再备份,冗余冗余再冗余。反正有的是磁盘,不是么?HDFS依旧用了这样的方式,可能稍微不同。

2、怎么从1个磁盘读取的数据与其他99个磁盘读取的数据结合使用,这个有点类似于地统计学与传统统计学的却别了,他们有的时候是相互影响的,不是独立的。结合多个来源的数据,分析结果,是一个很大的挑战,乱了怎么办。这个时候,Mapreduce出来了,他会把读取得到的数据转换成一个数据集,即键值对来进行计算,你想咋折腾都行。

      总之,Hadoop提供了一个可靠的共享存储与分析系统。HDFS实现存储,MapReduce实现分析处理。当然你也可以单独使用一部分,那样可能没有把大象效率最大化。纵然Hadoop还有很多其他功能,但这两部分是他的核心。

0 0