Hadoop基本框架及其原理

169 阅读3分钟

Hadoop的基本框架

  • HDFS(Hadoop分布式文件系统)
  • MapReduce(分布式计算框架)
  • Yarn(分布式资源管理器)

HDFS

HDFS主要由3个组件构成,分别是NameNode、SecondaryNameNode和DataNode,HDFS是以Master-Slave(主从)模式运行的,其中NameNode和SecondaryNameNode运行在Master节点上,DataNode运行Slave节点。

读取文件流程

  1. 客户端发起读请求。
  2. 客户端从NameNode得到文件的数据块及位置信息列表。
  3. 客户端直接和DataNode交互读取数据。
  4. 读取完成关闭连接。

上传文件流程

  1. 客户端在向NameNode请求之前先将文件数据写入本地文件系统的一个临时文件。
  2. 待临时文件达到数据块大小时开始向NameNode请求DataNode信息。
  3. NameNode在文件系统中创建文件并返回给客户端一个数据块及其对应DataNode的地址列表(列表中包含副本存放的地址)。
  4. 客户端通过得到的信息把创建临时数据块Flush到表中的第一个DataNode。
  5. 当文件关闭时,NameNode会提交这次文件创建,此时文件在文件系统中可见。

上面步骤4中描述的Flush过程的实际处理过程比较复杂,现在单独描述一下。

  1. DataNode1是以数据包(数据包一般为4 KB)的形式从客户端接收数据的,DataNode1在把数据包写入到本地磁盘的同时会向DataNode2(作为副本节点)传送数据。
  2. DataNode2把接收到的数据包写入本地磁盘时会向DataNode3发送数据包.
  3. DataNode3开始向本地磁盘写入数据包,此时,数据包以流水线的形式被写入和备份到所有的DataNode。
  4. 传送管道中的每个DataNode在收到数据后都会向前面那个DataNode发送一个ACK,DataNode1会向客户端发回一个ACK。
  5. 当客户端收到数据块的确认ACK之后,数据块被认为已经持久化到所有的节点,然后客户端会向NameNode发送一个ACK。
  6. 如果管道中的任何一个DataNode失败,管道会被关闭,数据将会继续写到剩余的DataNode中。同时NameNode会被告知待备份状态,NameNode会继续备份数据到新的可用节点。
  7. 数据块通过计算校验和来检测数据的完整性,校验和以隐藏文件的形式被单独存放在HDFS中,供读取时进行完整性校验。

删除文件

HDFS中删除文件过程一般需要如下几步。

  1. 在开始删除文件时,NameNode只是重命名被删除的文件到“/trash”目录下,因为重命名操作只是元数据的变动,所以整个过程非常快。在“/trash”目录下,文件会被保留一定的时间(可配置,默认是6小时),在这期间,文件可以很容易被恢复,恢复时只需要将文件从“/trash”移出即可。
  2. 当指定的时间到达时,NameNode将会把文件从命名空间中删除。
  3. 标记删除的数据块释放空间,HDFS文件系统显示空间增加。