HDFS及其各组件的机制
一、hdfs运行机制
概述:用户的文件会被切块后存储在多台datanode节点中,并且每个文件在整个集群中存放多个副本,副本的数量可以通过修改配置自己设定。
hdfs:hadoop distributed file system,分布式文件系统。
hdfs的机制:
hdfs集群中,有两种节点,分别为namenode,datanode;
namenode它的作用时记录元数据信息,记录块信息和对节点进行统一管理。比如用户要存储一个很大的文件,hdfs系统会对这个文件进行切分,然后存储在多台namenode节点当中,那么每个切的大小,存储的路径信息,文件的副本数等元数据信息会存储在元数据当中,由namenode进行管理和记录。
datanode节点的作用是存储数据,namenode将数据切块后的分配给多个datanode节点,datanode对数据块进行存储,datanode它默认的块大小在hadoop1.x的版本中是64m,而hadoop2.x之后的版本默认块大小为128m。
hdfs还有一个副本机制,它会默认给存在datanode当中的每块文件进行备份,默认的副本数量(republication)为3,这样保证了数据的安全性。
大致如图:
二、hdfs写数据流程
1.客户端向namenode请求上传文件数据hunter.txt(大小:200m);
2.namenode响应可以上传文件;
3.客户端向namenode请求上传第一个block(0~128m),请求返回datanode节点;
4.namenode返回三个datanode节点(副本数默认为3),采用这三个节点存储数据;
5.客户端向datanode请求建立一个block的传输通道;
6.datanode应答通道建立成功;
7.客户端向datanode传输数据,数据写入到hdfs文件系统当中。
三、hdfs读数据流程
1.客户端向namenode请求下载文件hunter.txt(200m);
2.namenode返回目标文件的元数据信息(block所在的datanode);
3.客户端向datanode请求读取数据文件;
4.datanode以fsdatainputstream流的形式向客户端传输数据;
5.客户端生成hunter.txt文件。
四、namenode运行机制
首先去到主节点namenode的元数据信息dfs目录中,可以看到很多种文件,如下:
edits:存放hdfs系统所有的更新操作的日志文件
fsimage:hdfs元数据的永久性的检查点,其中包含了hdfs系统所有的目录和文件
seen_txid:最有一个edits文件的数字,即edits文件个数
version:记录了很多的id,如下:
namespaceid:每个节点的id,每个节点都不同
clusterid:一个集群统一的id,是唯一的,一个集群中所有节点的clusterid都相同
ctime:namenode存储系统的使用时间的时间戳
storagetype:节点类型
blockpoolid:跨集群的全局唯一
layoutversion:版本号
namenode的运行机制:
1.首先启动集群,会启动namenode和secondarynamenode,两个节点的内存会加载日志文件和镜像文件(edits、fsimage文件);
2.当客户端对hdfs集群进行增删改查等操作时,日志文件会更新滚动;
3.当eidts文件数量达到默认阈值,或checkpoint时间到达默认触发时间时;
(dfs.namenode.checkpoint.period :多久checkpoint一次、
dfs.namenode.checkpoint.check.period:多久检查一次操作的次数、
dfs.namenode.checkpoint.txns:多少次操作后chechpoint一次)
4.namenode将edits文件拷贝到secondarnamenode;
5.secondarnamenode的内存会加载拷贝的edits文件并合并;
6.secondarnamenode会生成新的镜像文件fsimage.checkpoint;
7.secondarnamenode将新生产的镜像文件拷贝到namenode;
8.namenode将收到的镜像文件重命名为fsimage;
9.namenode将新的fsimage镜像文件发送到secondarnamenode
这样两个节点的元数据信息就相同了!!!
五、datanode运行机制
1.hdfs集群启动后,datanode现象namenode发送注册信息;
2.namenode返回注册成功;
3.每隔一段时间datanode会上传所有的块信息到namenode;
(块信息:数据、数据长度、校验和、时间戳等)
4.默认如果超过10分钟namenode没有收到datanode的信息信息,则认为节点不可用