参考:《Linux 7 高薪运维入门》
Hadoop主要由核心子项目HDFS、MapReduce及其他一些子项目组成。
其中,HDFS是分布式文件系统,主要用于大规模数据的分布式存储。
MapReduce分布式计算框架构建在HDFS之上,主要用于对存储在分布式文件系统上的数据进行分布式计算。
其他子项目基本都是基于HDFS和MapReduce发展而来的。
HDFS分布式文件系统
HDFS是一个高度容错性系统,采用master/slave结构。
主要由Namenode、Datanode和client组成:
(1)client。相当于用户,从HDFS中读取和写入数据,这个过程通过与Namenode、Datanode交互完成。
(2)Namenode。主节点,HDFS的核心,负责管理整个HDFS的名称空间及客户端的访问,如打开、关闭、删除、重命名文件和目录。同时,Namenode还保存着数据块与Datanode之间的映射关系,数据块的创建、删除和复制等操作都是在Namenode的统一调度下完成的。此外,它还负责通过心跳来监视Datanode的状态。
(3)Secondary NameNode。定时与NameNode进行同步。Namenode的备份节点。
(4)Datanode。安装在slave节点上,主要负责数据的存储。当用户向HDFS传输一个文件时,会将文件分割为若干个大小固定的块,然后再存放在多个Datanode中。
基本流程:当client需要读取和写入数据时,首先向Namenode提出申请,Namenode会返回应该从哪些Datanode读写数据,最后client在与Datanode联系读取或写入数据块即可。
HDFS如何保证数据的容错性?
采用块复制的方式来保证数据的容错性。
当HDFS存储一个数据块时,会将数据块复制并存放到不用的Datanode中,通常是一个数据块保存3份。这样保证了即使一个Datanode出问题,数据依然可以读取。另外当用户读取数据时,Namenode会根据Datanode与用户的距离、Datanode是否繁忙等因素确定用户应该从哪些Datanode中读取数据。
MapReduce计算框架
MapReduce同样采用master/slave结构。
(1)client。用户,用来提交任务并接收计算结果。
(2)JobTracker。主节点,主要用来接收用户提交的任务、资源监控和作业调度等。JobTracker从client接收到任务后,将作业分配给TaskTracker执行,同时还会监控所有TaskTracker和作业的健康状态。发现失败,则会将任务转移到其他节点上。在整个任务执行过程中,JobTracker会跟踪任务的执行进度以及资源使用等情况。
(3)TaskTracker。从节点,主要用来接收并执行由JobTracker分配的作业。TaskTracker会周期性地通过心跳将本节点上的资源使用情况、作业运行进度等汇报给JobTracker,同时接收作业信息、执行命令等。
(4)Task。任务/作业,可以分为Map Task和Reduce Task。
基本处理过程:首先数据被分割为不同的数据块,然后通过Map函数进行映射运算,达到分布式运算的效果。最后由Reduce函数对所有结果进行汇总处理,得出程序开发者想要的结果。其中,Map和Reduce函数都由程序开发者自己定义功能。