hdfs学习
基础概念
1.hdfs为分布式文件存储系统,分为namenode和datanode两大类型节点,namenode负责元数据的管理(如块大小,副本大小,块存放位置等),datanode负责具体数据的管理。
2.可以设置副本数量,每个块的大小等。
namenode元数据管理
checkpoint
1.namenode的实时的完整的元数据存储在内存中;namenode还会在磁盘中(dfs.namenode.name.dir)存储内存元数据在某个时间点上的镜像文件;
namenode会把引起元数据变化的客户端操作记录在edits日志文件中;
2.secondarynamenode会定期从namenode上下载fsimage镜像和新生成的edits日志,然后加载fsimage镜像到内存中,然后顺序解析edits文件,对内存中的元数据对象进行修改(整合)整合完成后,将内存元数据序列化成一个新的fsimage,并将这个fsimage镜像文件上传给namenode
上述过程叫做:checkpoint操作
3.提示:secondary namenode每次做checkpoint操作时,都需要从namenode上下载上次的fsimage镜像文件吗?
第一次checkpoint需要下载,以后就不用下载了,因为自己的机器上就已经有了。
客户端写数据到hdfs的流程
1.客户端请求写文件/aa/jdk.tgz
2.namenode告知可写
3.请求写入第一个block
4.namenode返回全部的datanode
5.客户端挑选一个node1,请求建立文件传输的连接
6.因为要有副本,node1请求和node2建立传输连接
7.node2请求和node3建立传输连接
8.node3响应了node2
9.node2响应了node1
10.node1响应了客户端
11.客户端本地文件输入流,通过网络输出流,传输给node1,node1是网络输入流,本地流写文件,同时网络输出向node2传输文件,以此类推。
12.写完第一个block之后,重复3-11的流程
13.数据全部写完之后,告知namenode
14.namenode会记录元数据信息
15.如果存在node保存文件失败,会定时向namenode报告,namenode来判断是否来复制,或者是否是脏数据要丢弃。
客户端从hdfs读数据的流程
1.客户端请求读数据/aa/jdk.taz
2.namenode返回元数据信息[BLK_1:DN1,ND2,DN3]
[BLK_2:DN1,ND2,DN3]
3.客户端选择其中一个机器,请求建立连接,进行数据传输
4.读完之后再选择BLK_2中的机器进行数据传输