Hadoop限制了进程的通信量,因为每个任务所处理的单个记录与其它记录无关,这初看起来似是一个极大的限制,但它是整个框架更可靠,Hadoop不会运行任意一个程序并将它分布到整个集群,程序必须符合一个特定的编程模型,称为MapReduce。
在MapReduce中,Mapper任务是将记录分开,Mapper的输出会作为Reducer任务的输入,Reducer再将不同的Mapper结果合并。
在一个Hadoop集群中,不同的结点仍会相互通信,但是与其它传统的分布式系统通信有所不同,传统的作法是应用设计者要显式地通过socket或MPI缓冲将字节流从一个结点传到另一个结点,但在Hadoop上的通信是隐式的,数据片断都有着key值,通过它Hadoop就知道如何将相关信息位发送到一个目标结点。
Hadoop在内部管理数据传输和集群拓扑。
通过限制结点之间的通信,Hadoop使分布式系统更可靠,单个结点崩溃可以通过其它结点重新开始任务的方式正常工作。
因为用户级任务不需要结点之间显式地通信,所以不需要用户程序交换信息,同样结点不需要回滚到预定义的检测点去部分地重新开始计算,在Hadoop中其它正常结点继续运行,好似没有错误发生,并将部分重新开始程序这个挑战的方面留到Hadoop层处理。
如下图所示,在结点上运行的Mapping和Reducing任务,其中记录也在图中有显示。
