九.大数据技术之hadoop(5)

HDFS的体系结构

NameNode: HDFS的主要管理者;接受客户端的请求,比如说,将本地文件上传到HDFS上;维护文件的元信息(fsimage文件)和操作日志(edit文件)

文件的元信息(fsimage文件):一个文件上传到HDFS上,文件会被切成一份份的数据块,记录这些数据块的文件就是文件的元信息

九.大数据技术之hadoop(5)

打开虚拟机,进入 ~/training/hadoop-2.7.3/tmp/dfs/name/current目录,看到fsimage*******文件就是文件的元信息,这个文件记录着HDFS上数据块的保存位置(数据块保存在哪个节点上),但此文件是二进制的文件,不能查看
九.大数据技术之hadoop(5)

操作日志文件(edit文件): 记录着客户端的所有操作的日志文件

文件的位置与fsimage文件在同一个目录下,其中edits_inprogress_*********文件详细记录着用户的每个操作

DataNode: 数据节点(伪分布式一个, 全分布式至少两个),主要用于保存文件的数据块(hadoop1.x 数据块为64M, hadoop2.x数据块为128M)

九.大数据技术之hadoop(5)

进入到tools的目录下,讲目标文件hadoop2.7的安装包上传到HDFS上,(ps: HDFS基本操作命令与Linux类似,不会的请参考http://blog.****.net/zhaojw_420/article/details/53161624), 首先使用hdfs dfs -mkdir /tools在HDFS上创建一个名为tools的目录,然后用hdfs dfs -ls / 可以查看HDFS的根目录看到多了一个/tools的目录(/input是之前创建的),hdfs dfs -put hadoop-2.7.3.tar.gz /tools 上传文件

九.大数据技术之hadoop(5)

然后进入本地的~/training/hadoop-2.7.3/tmp/dfs/data/current/BP-402346230-192.168.145.111-1519934689058/current/finalized/subdir0/subdir0目录下,看到有四个文件,其中blk_******就是数据块文件,blk_*****.meta就是对应的数据块元信息文件

九.大数据技术之hadoop(5)

134217728 = 128 * 1024 * 1024,  79874467 = 76 * 1024 *1024,  经过计算,源文件(204M)上传到HDFS上被切成了两个数据块,第一个为128M, 第二个为76M(204 - 128 = 76),如果上传的文件大于256M,文件会被切成三个或者三个以上的数据块,依次类推

SecondaryNameNode: 第二名称节点,主要职责是定期将元信息文件(fsimage文件)与日志文件(edit)进行合并,由于用户的操作都会被记录到日志文件里,日志文件体现文件的最新状态,所以要定期将日志与元信息文件进行合并

九.大数据技术之hadoop(5)

合并过程:1. HDFS发出检查点; 2. SecondaryNameNode从NameNode中下载元信息与日志文件; 3.SecondaryNameNode将下载的文件合并成一个文件(.check文件);4.SecondaryNameNode将合并后的.check文件传回给NameNode,并产生新的日志文件;5. NameNode将文件进行重新命名