在学过了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拖慢项目的总进度。