摩尔定律在过去几十年间对我们都是适用的,但解决大规模计算问题却不能单纯依赖于制造越来越大型的服务器。有一种替代方案已经获得普及,即把许多低端/商用的机器组织在一起,形成一个功能专一的分布式系统。

  为了理解盛行的分布式系统(俗称向外扩展)与大型单机服务器(俗称向上扩展)之间的对比,需要考虑现有I/O技术的性能价格。对于一个有4个I/O通道的高端机,即使每个通道的吞吐量各为100 MB/sec,读取4 TB的数据集也需要3个小时!而利用Hadoop,同样的数据集会被划分为较小的块(通常为64 MB),通过Hadoop分布式文件系统(HDFS)分布在集群内多台机器上。使用适度的复制,集群可以并行读取数据,进而提供很高的吞吐量。而这样一组通用机器比一台高端服务器更加便宜!

  前面的解释充分展示了Hadoop相对于单机系统的效率。现在让我们将Hadoop与其他分布式系统架构进行比较。一个众所周知的方法是SETI @ home,它利用世界各地的屏保来协助寻找外星生命。在SETI @ home,一台中央服务器存储来自太空的无线电信号,并在网上发布给世界各地的客户端台式机去寻找异常的迹象。这种方法将数据移动到计算即将发生的地方(桌面屏保)。经过计算后,再将返回的数据结果存储起来。

  Hadoop在对待数据的理念上与SETI@Home等机制不同。SETI @ home需要客户端和服务器之间重复地传输数据。这虽能很好地适应计算密集型的工作,但处理数据密集型任务时,由于数据规模太大数据搬移变得十分困难。Hadoop强调把代码向数据迁移,而不是相反。参考图1-1,我们看到Hadoop的集群内部既包含数据又包含计算环境。客户端仅需发送待执行的MapReduce程序,而这些程序一般都很小(通常为几千字节)。更重要的是,代码向数据迁移的理念被应用在Hadoop集群自身。数据被拆分后在集群中分布,并且尽可能让一段数据的计算发生在同一台机器上这段数据驻留的地方。

  这种代码向数据迁移的理念适合Hadoop面向数据密集型处理的设计目标。要运行的程序(“代码”)比数据在规模上小几个数量级,更容易移动。此外,在网络上移动数据要比在其上加载代码更花时间。不如让数据不动,而将可执行代码移动到数据所在的机器上去。

  现在你知道Hadoop是如何契合分布式系统的设计了,那就让我们看看它和通常的数据处理系统(SQL数据库)比较会怎么样。

下一篇:比较SQL数据库和Hadoop 摘自:《Hadoop实战》