Hadoop入门实践之构造模块上一篇文章主要使用使用Hadoop编写了一个单词计数程序,接下来将从Hadoop整体上学
Hadoop入门实践之构造模块
上一篇文章主要使用使用Hadoop编写了一个单词计数程序,接下来将从Hadoop整体上学习Hadoop的部署结构,模块的构造等。
Hadoop组成Hadoop由Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)和MapReduce编程框架组成。HDFS实现了类似与GFS(Google File System)的功能,专为MapReduce这类框架下的大规模分布式数据库而设计,使用HDFS可以不考虑分布式文件系统的细节,就如使用在文件系统中处理单个文件一样。MapReduce是一个数据处理模型,它建立在HDFS之上,数据处理原语称为mapper和reducer,使用MapReduce最简单的情况仅需实现mapper和reducer,然后提交给MapReduce服务器进行处理。mapper主要负责以关键字(key)对数据进行归类,然后发送给reducer,reducer接收到mapper处理的数据之后,再进行汇总,由于同时运行mapper和reducer的可能有多台机器,所以在mapper将数据发送给reducer的过程中会根据mapper处理的每条数据的key值进行数据重排,将具有相同key值的数据发送给同一个reducer以便reducer进行汇总。
在WordCount程序中先从文件中读取的每条数据,再以word为单位进行分割,然后传递给mapper,mapper将每个单词的数量记为1,然后封装成一条记录,传递给reducer,此时可能有多台机器同时运行mapper,所以同一个word可能出现在多台机器上,在mapper统计结束之后,再根据每个word,将相同word的记录传递给同一个reducer,然后reducer对每个word出现的次数进行汇总。这就是MapReduce的运行过程,这整个过程都运行在HDFS之上。下面是我看到的一个简单的形象描述MapReduce的示例图片:
Hadoop守护进程Hadoop是一个分布式的处理框架,所以只有在集群中才能发挥Hadoop的最大价值,它以HDFS作为其文件系统,HDFS就是建立在操作系统的文件系统之上的分布式文件系统,部署在一个庞大的集群中,那么在这个集群中,各个结点如何通讯协作呢?Hadoop的开发者设计了结点:
NameNode 名字结点DataNode 数据结点Secondary NameNode 次名字结点JobTracker 作业跟踪结点TaskTracker 任务跟踪结点
其中NameNode,DataNode和Second NameNode逻辑上属于HDFS,JobTracker和TaskTracker主要逻辑上属于MapReduce,Hadoop就是通过这些结点的协作,保证了整个集群的运行。下面来看看各个结点的作用:
NameNodeHadoop在其分布式计算(MapReduce)与分布式存储(HDFS)中都采用了主从结构,在HDFS集群中,NameNode是主端,DataNode是从端。NameNode主要存储HDFS中的元数据,它指导从端DataNode执行底层的IO任务,将数据存储在DataNode上。
DataNodeDataNode用于将HDFS数据块读取或者写入到本地文件系统的实际文件中去,当客户端需要对HDFS文件进行读写时,文件会被分割为多个块,由NameNode告知客户端每个数据块驻留在哪个DataNode上,客户端知道数据块存储的DataNode之后就直接与DataNode进行通信,来处理与数据块相对应的本地文件,DataNode再与其他DataNode通信,复制这些数据块以实现荣誉,最后对数据块的描述信息都存储在NameNode中。
对于NameNode和DataNode的关系,以WordCount程序的文件存储过程来说明。在WordCount程序中,当开作业始执行之后,客户端按照配置文件中指定的配置信息,将大文件分割成小文件块,告诉NameNode文件块的大小和副本数量(通常是3个),NameNode就在HDFS的集群中寻找几个DataNode,这几个DataNode与客户端的距离是递增的,并且将这几个DataNode的地址信息返回给客户端,客户端接收到DataNode的地址之后,就将要写入到HDFS中的数据块发送给离它最近的DataNode1,在客户端发送数据的同时,接收数据的DataNode1给与其距离最小的DataNode2发送数据,就这样,每个DataNode在接收数据的同时给离它最近的还未接收数据的DataNode发送数据。一旦一个数据块在要备份到的DataNode中传送完成后,DataNode将数据块的信息发送给NameNode,NameNode存储了数据块的路径,大小,访问权限等信息,NameNode再将传送完成的信息发送给客户端。对于大文件的每一个数据块都执行上述过程。
Secondary NameNodeSecondary NameNode(SNN)是一个用于监测HDFS集群状态的辅助守护进行,它与NameNode进行通信,根据集群所配置的时间间隔获取HDFS元数据的快照。SNN定期清理NameNode上文件系统的状态信息,使之紧凑,帮助NameNode变得更有效率。
JobTrackerJobTracker用于应用程序执行Hadoop,一旦提交代码到集群上,JobTracker就会确定执行计划,包括决定处理哪些文件,为不同的任务分配结点以及监控所有任务的运行。如果任务执行失败,JobTracker将自动重启任务,但分配的结点可能不同。JobTracker与TaskTracker一起组成Hadoop执行分布式计算的主从结构,JobTracker作为主结点,监测MapReduce作业的整个执行过程。
TaskTracker每个从结点上都有一个TaskTracker,主要用于管理各个任务在从结点上的执行情况,负责执行由JobTracker分配的单项任务。TaskTracker持续不断的与JobTracker通信,如果JobTracker在指定时间内没有收到来自TaskTracker的"心跳",则会假定这个TaskTracker已经崩溃,进而重新提交任务到集群中的其他结点。
下图描述了JobTracker与TaskTracker的交互过程
下图十一个典型的Hadoop集群的拓扑图。