HDFS相关知识点
- Namenode与Datanode的多目录配置
- 服务器间的数据拷贝
- 集群间的数据拷贝
- 小文件归档
解决办法
案例 - HDFS回收站机制
- 快照管理
- HDFS的写过程
- 网络拓扑与节点距离的计算
- HDFS读过程
- 总结
Namenode与Datanode的多目录配置
Namenode相同
Datanode不同
服务器间的数据拷贝
#1.推 将文件推到指定主机
scp -r hello.txt root@hadoop2:/tmp
#2.拉 远程主机拷贝到本机
scp -r root@hadoop2:/tmp/hello.txt ./hello.txt
#3.通过本地主机中转实现两个远程主机的文件复制
scp -r root@hadoop2:/tmp/hello.txt root@hadoop3:/tmp/hello.txt
集群间的数据拷贝
采用distcp命令实现两个hadoop集群之间的递归数据复制
#工作端口默认9000 50070为外部接口
bin/hadoop distcp hdfs://hadoop1:9000/user/root/hello.txt hdfs://hadoop2:9000/user.root.hello.txt
小文件归档
hdfs不适合存储大量的小文件
因为在namenode在存储过程中会开辟大量的小空间,分块存储,每个块的元数据存储在namenode的内存中,因此hdfs存储小文件会变得非常低效
大量的小文件会耗尽namenode中的大部分内存
存储小文件所需要的磁盘容量和数据块的大小无关
误区需注意: datanode实际上是逻辑上的划分,并非实际的划分;但是namanode确实实际的; 例如:1MB的文件设置为128MB的块存储,时间使用的是1MB的磁盘空间,而不是128M;
解决办法
1.hdfs存档文件或hdr文件,是一个更高效的文件存档工具;
2.它将文件存入hdfs块,在减少namenode的内存使用的同时,允许对文件进行透明的访问;
3.具体来说,hdfs存档文件对内还是一个一个的独立存储,对namenode而言是一个整体,减少了namenode的内存
案例
- 时间案例演示:
案例链接
HDFS回收站机制
开启回收站功能,可以讲删除的文件在不超时的情况下,回复原文件
防止误删,关闭等
默认关闭
api语言不会直接进入回收站,只有shell脚本可以;
例:java需要调用moveToTrash()才会进入回收站
设置文件:core-site.xml
1.默认值fs.trash.interval=02.默认值fs.trash.checkpoint.interval=0
3.要求fs.trash.checkpoint.interval=fs.trash.interval
#恢复回收站
hadoop fs -mv /user/root/.Trash/Current/user/root/input /user/root/input
#清空回收站
hadoop fs -expunge
快照管理
默认关闭
1.快照管理相当于对目录做一个备份
2.不会立即复制所有文件,而是指向同一个文件
3.当写入发生时,才会产生新文件
#1.开启快照
hdfs dfsadmin -allowSnapshot 路径
#2.禁止指定目录的快照,默认是禁用
hdfs dfsadmin -disallowSnapshot 路径
#3.对目录创建快照(当前时间)
hdfs dfs -createSnapshot 路径
#4.以指定名称创建快照
hdfs dfs -createSnapshot 路径 名称
#5.重命名快照
hdfs dfs -renameSnapshot 路径 旧名称 新名称
#6.列出当前用户所有可快照目录
hdfs lsSnapshotableDir
#7.比较两个快照目录
hdfs snapShotDiff 路径1 路径2
#8.删除快照
hdfs dfs -deleteSnapshot 路径 名称
HDFS的写过程
首先客户端对big.dat根据blocksize进行切分
1.向namenode请求上传文件到指定位置;
2.namenode查询没有问题后,向客户端回应,客户端开始传送;
3.客户端请求上传和传输block,返回datanode;
4.namenode给客户端反馈指定传输位置,namenode给客户端传送了三个节点;
5.客户端根据namenode返回节点进行传输,选择和客户端距离最近的节点建立传输通道;
6.节点进行应答;
7.客户端开始传输数据;
datanode之间的通道和客户端无关,客户端只给一个距离最近datanode进行传输,其余datanode的文件传输是datanode自行建立的,走的是集线器的背板带宽;
第一个块传输完毕,给客户端反馈,开始第二个块的传输
网络拓扑与节点距离的计算
HDFS写数据的过程中,NameNode会选择距离待上传数据距离近的DataNode接收数据;
实际应用:异地容灾问题
节点距离:两个节点到达最近共同祖先的距离总和
网络上的距离不是物理的距离;
节点到一个网关可以理解为共用一个路由器
计算方式
1.同一节点:Distance(d1/r1/n0,d1/r1n0)=0
自己与自己通信,走回环网卡
2.同一机架上的不同节点
Distance(d1/r1/n1,d1/r1/n2)=2
3.同一数据中心不同机架上的节点
Distance(d1/r2/n0,d1/r3/n2)=4
不同数据中心的节点
Distance(d1/r2/n1,d2/r4/n1)=6
网络拓扑
HDFS读过程
1.客户端向namenode请求读数据,并且说明指定位置
2.namenode返回元数据信息(从哪开始分了多少块)
3.客户端根据namenode返回的元数据信息从datanode进行读取
4.客户端把块拼接,进行文件复原
第二章总结
期末考试
题型分布
简答5个:第二章第三章对半
第二章:6-9小节一个简答;
2.10至少2个简答题或1个简答1个综合
综合2个:第二章第三章各1个
第一章无大题
期末考试大题占一半
maven会考概念,不会考配置文件
JavaApi基本没有考点
NN和2NN非常重要
版本特性考点不多,至多一道简答题
HDFS读写过程,一道大题起,可能两道
第三章数据压缩 一个填空