Hadoop设计时有以下的几点假设
1、服务器失效是常态事件,而不是意外事件;
2、存储和处理的数据是海量的;
3、文件不会被频繁写入和修改,绝大部分文件的修改是采用在文件尾部追加数据,而不是覆盖原有数据的方式。对文件的随机写入操作在实际中几乎不存在;
4、机柜内的数据传输速度大于机柜间的数据传输速度;
5、海量数据的情况下移动计算比移动数据更有效;
数据处理上的对比
Hadoop与MPI在数据处理上的差异主要体现在数据存储和数据处理在系统中位置不同。MPI是计算与存储分离,Hadoop是计算向存储迁移。
MPI是一种基于消息传递机制的并行编程标准,它为程序设计者提供了丰富而方便的通信函数,在程序设计上非常简单而且符合普通程序员的编程习惯。然而MPI有一个比较大的缺陷,即底层没有一个分布式的文件系统对其进行支持。在MPI中数据存储的节点和数据处理的节点往往是不同的,一般在每次计算开始时MPI需要从数据存储节点读取需要处理的数据分配给各个计算节点,然后进行数据处理,即MPI的数据存储和数据处理是分离的。对于计算密集型的应用MPI能表现出良好的性能,但对于处理TB级数据的数据密集型应用,大量的数据在节点间进行交换,网络通信时间将成为影响系统性能的重要因素,性能会大大降低。用“计算换通信”也是MPI并行程序设计中的基本原则 。
在Hadoop中有HDFS文件系统的支持,数据是分布式存储在各个节点的,计算时各节点读取存储在自己节点的数据进行处理,从而避免了大量数据在网络上的传输,实现“计算向存储的迁移”。这对处理TB级的海量数据有很大的优势。
Hadoop从上层架构上看是一种典型的主从式结构,主从式的结构在MPI并行程序设计中也是一种重要的并行程序设计方法,主节点负责对整个系统的数据和工作进行管理和分发。而Hadoop与MPI最根本的区别在于,Hadoop有一个主从式的文件系统HDFS在底层支撑其Map/Reduce的数据处理功能。有了HDFS,Hadoop可以方便地实现“计算向数据存储位置的迁移”,从而大大提高了系统计算效率。主从式基础存储和主从式数据处理构成了Hadoop的基本架构模型。
另外,MPI无法应对节点的失效。如果MPI在运行过程出现节点失效及网络通信中断,则只有返回并退出,MPI没有提供一套机制处理节点失效后的备份处理方案问题,所以如果中途出现问题,所有的计算将重新开始,这是非常耗时的。Hadoop为应对服务器的失效,在数据备份上下了很大的功夫,数据块会形成多个副本存储在不同的地方,一般会有3个副本,采用简单化的跨机架数据块存储,最大限度避免了数据丢失,数据的安全性得到了保证。