在学过了Hadoop之后,Hadoop集群中的思想理念似乎也在生活中随处可见。下面举一个例子类比Hadoop集群中牵涉到的关键概念,以便更深入地理解Hadoop。


以一软件开发团队为例,团队中有领队(Leader)及其各成员(Members)。

  • NameNode:对应团队中的Leader,负责团队各方面工作的协调及工作分配;
  • DataNode:对应团队中Member,负责具体的工作任务,如:编码(task),写文档(存储);
  • 通信网络:Leader与成员以及成员之间的日常交流;Member向Leader提交周报;

  • HDFS:
  • 容错:团队中一名成员的离去,不影响团队的正常工作(节点会出错);团队中可以允许成员有工作失误(存储会出错);团队成员有时不能正确理解Leader任务分配(通信会出错);
  • 冗余:项目关键数据需多个人知道;启动两个项目组做同一个重要项目;

  • MapReduce:
  • Leader通过开会(客户端)接收到一个作业;
  • Leader将这个作业拆分(split)成多个task;
  • Leader将这个作业分配(map)给多个Members;
  • Member完成了一个分配(map)任务之后需要消化整理(shuffle)后再提交给其它Member,以便他人能快速获取(Fetch)、理解前一个Member的工作,进而节省了通信时间。
  • 团队中的部分成员需要对其它成员的工作做归并(reduce)操作,以便得到最终结果。根据任务的差异,有时候归并操作只能一个人(一台服务器)来做,例如:对多个Member的结果按字母顺序归并且全局排序。

  • 心跳机制:每天(3s)Member都需要打卡向Leader报告,表示来上班了,如果有Member连续10天(mins)没来上班了,Leader则认为他离职了(dead)。
  • 推测执行(Speculative execution):若Leader发现有个Member的项目进度太慢,则启用另一个Member与其做同样的工作,谁先做完就用谁的结果,避免个别Member拖慢项目的总进度。