[实验目的]
- 熟悉HDFS的相关基本概念;
- 熟悉HDFS的基本操作。
[实验原理]
HDFS的全称为Hadoop分布式文件系统(Hadoop Distributed File System),是Hadoop的文件系统。HDFS对用户来说就如同单块磁盘,它其实是运行在Linux文件系统之上。其优点还包括:
- 高容错性:可以处理磁盘损坏和机器宕机等等;
- 能够存储大文件:文件大小可以达到TB甚至PB级别,远超单块磁盘的最大容量;
- 利用普通商用硬件:不需要超级计算机,可以用可靠性一般的普通商用硬件。
HDFS的守护进程有以下三类:
- 命名节点(namenode):管理文件系统的命名空间、元数据和文件,一般只运行在一台机器上;
- 数据节点(datanode):存取数据,向命名节点报告情况,一般运行在许多台机器上;
- 备份名称节点(secondary namenode):用于辅助命名节点的工作。
其具体架构如下图所示。
在HDFS中,文件被分成了不同的文件块(block),文件块是文件存储的最小单元,由命名节点管理,实际存储在数据节点上。每一个文件块都会在载入时复制到不同机器上,提供高容错性和可用性,默认复制3份,且默认的文件块大小是64MB。在下图中可以看出,文件块B1和B2被复制了3份且存储在不同的数据节点。
出于可扩展性的考虑,命名节点不直接读写数据。客户端与命名节点通信,获取HDFS的命名空间,并得到读写数据的具体文件块位置,然后直接从数据节点读写数据。
在HDFS上写数据的流程如下图所示,基本步骤为:
- 在命名节点中创建文件的命名空间;
- 将数据流从客户端传到从机1;
- 将数据流从从机1传到从机2;
- 将数据流从从机2传到从机3;
- 将成功或失败信号从从机3传到从机2;
- 将成功或失败信号从从机2传到从机1;
- 将成功或失败信号从从机1传到客户端。