Hadoop的基本框架
- HDFS(Hadoop分布式文件系统)
- MapReduce(分布式计算框架)
- Yarn(分布式资源管理器)
HDFS
HDFS主要由3个组件构成,分别是NameNode、SecondaryNameNode和DataNode,HDFS是以Master-Slave(主从)模式运行的,其中NameNode和SecondaryNameNode运行在Master节点上,DataNode运行Slave节点。
读取文件流程
- 客户端发起读请求。
- 客户端从NameNode得到文件的数据块及位置信息列表。
- 客户端直接和DataNode交互读取数据。
- 读取完成关闭连接。
上传文件流程
- 客户端在向NameNode请求之前先将文件数据写入本地文件系统的一个临时文件。
- 待临时文件达到数据块大小时开始向NameNode请求DataNode信息。
- NameNode在文件系统中创建文件并返回给客户端一个数据块及其对应DataNode的地址列表(列表中包含副本存放的地址)。
- 客户端通过得到的信息把创建临时数据块Flush到表中的第一个DataNode。
- 当文件关闭时,NameNode会提交这次文件创建,此时文件在文件系统中可见。
上面步骤4中描述的Flush过程的实际处理过程比较复杂,现在单独描述一下。
- DataNode1是以数据包(数据包一般为4 KB)的形式从客户端接收数据的,DataNode1在把数据包写入到本地磁盘的同时会向DataNode2(作为副本节点)传送数据。
- DataNode2把接收到的数据包写入本地磁盘时会向DataNode3发送数据包.
- DataNode3开始向本地磁盘写入数据包,此时,数据包以流水线的形式被写入和备份到所有的DataNode。
- 传送管道中的每个DataNode在收到数据后都会向前面那个DataNode发送一个ACK,DataNode1会向客户端发回一个ACK。
- 当客户端收到数据块的确认ACK之后,数据块被认为已经持久化到所有的节点,然后客户端会向NameNode发送一个ACK。
- 如果管道中的任何一个DataNode失败,管道会被关闭,数据将会继续写到剩余的DataNode中。同时NameNode会被告知待备份状态,NameNode会继续备份数据到新的可用节点。
- 数据块通过计算校验和来检测数据的完整性,校验和以隐藏文件的形式被单独存放在HDFS中,供读取时进行完整性校验。
删除文件
HDFS中删除文件过程一般需要如下几步。
- 在开始删除文件时,NameNode只是重命名被删除的文件到“/trash”目录下,因为重命名操作只是元数据的变动,所以整个过程非常快。在“/trash”目录下,文件会被保留一定的时间(可配置,默认是6小时),在这期间,文件可以很容易被恢复,恢复时只需要将文件从“/trash”移出即可。
- 当指定的时间到达时,NameNode将会把文件从命名空间中删除。
- 标记删除的数据块释放空间,HDFS文件系统显示空间增加。