1. HDFS体系结构
HDFS采⽤的是master/slaves这种主从的结构模型来管理数据,这种结构模型主要由 四个部分组成,分别是 Client、NameNode、DataNode、SecondaryNameNode
不同的线代表不同的通信协议
1.1 NameNode
1. NameNode时整个文件系统的管理节点,它主要作用
- 维护整个文件系统的目录树
- 维护每个文件对应的数据块列表
- 接收客户端的请求
2. NameNode主要包含以下文件,这些内容常驻内存,也会存在文件里面。
- Fsimage: 元数据镜像文件,是元数据的镜像快照,元数据信息包括:文件目录树、每个文件对应的数据块列表
- Edits: 操作日志文件(事务文件)会实时记录用户的所有操作
- seen_txid : 存储的是edits文件的尾数,是一个数字
- VERSION : 保存的集群的版本信息
NameNode总结
1.2 SecondaryNameNode
主要负责定期把edits文件中的内容合并到fsimage中,这个合并操作被称为checkpoint,在合并的时候会对edits中的内容进行转换,生成新的内存保存到fsimage中
注意: 在NameNode的HA架构中没有SecondaryNameNode进程,文件合并操作会由standby NameNode负责实现。
1.3 DataNode
查看数据块的位置
/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-1435466945-192.168.21.101-1664012102328/current/finalized/subdir0/subdir0
注:
NameNode、datanode目录下 都有一个clusterID,当重新格式化NameNode时,clusterID会发生改变,而datanode中的clusterID不变。因此在格式化NameNode时要先删除data目录。
2. HDFS高级操作
2.1 HDFS垃圾回收站
开启HDFS的垃圾箱功能
- 在core-site.xml 添加如下配置 , 单位是分钟
<property>
<name>fs.trash.interval</name>
<value>1140</value>
</property>
- 重启集群
- 删除测试
- 恢复数据
hadoop fs -mv hdfs://linux01:9000/user/root/.Trash/Current/user/root/input/ /user/root/
说明:
(1)垃圾回收目录是一个HDFS目录,恢复数据时只需要mv回去就行了。
(2)skipTrash 选项删除文件,该选项不会将文件发送到垃圾箱
hadoop fs -rm -R -skipTrash /user/root/input
(3)HDFS会为每个用户创建一个回收站目录: /user/用户名/.Trash/
(4)回收站中的数据都会有一个默认保存周期,过期未恢复则会被HDFS自动彻底删除
2.2 HDFS的安全模式
集群刚启动时HDFS会进入安全模式,此时无法执行写操作
查看安全模式:
hdfs dfsadmin -safemode get
离开安全模式
hdfs dfsadmin -safemode leave
2.3 定时上传数据到HDFS
定时上传日志数据到HDFS,有补数据的功能
#!/bin/bash
# 获取昨天日期字符串
yesterday=$1
if [ "$yesterday" = "" ]
then
yesterday=`date +%Y_%m_%d --date="1 days ago"`
fi
# 拼接日志路径信息
logPath=/opt/data/log/access_${yesterday}.log
# 将日期字符串中的_去掉,并且拼接称HDFS的路径
hdfsPath=/log/${yesterday//_/}
# 在HDFS创建目录
hadoop fs -mkdir -p ${hdfsPath}
# 将数据上传到HDFS的指定目录中
hadoop fs -put ${logPath} ${hdfsPath}
注: 执行脚本时加上-x 选项可以看到脚本的执行过程
3. HDFS的高可用和高扩展
抛出两个问题
NameNode节点宕机了怎么办?
NameNode节点内存不够了怎么办?
3.1 HDFS的高可用(HA)
HA : 集群中有多个NameNode
- HFDS的HA 表示集群中存在多个NameNode,只有一个NameNode时Active状态,其它的是Standby状态
- Active NameNode(ANN)负责所有客户端的操作
- Standby NameNode(SNN) 用来同步ANN的状态信息,以提供快速故障恢复能力
- 使用HA的时候不能启动SecondayNameNode,会出错。因为SecondayNameNode的职责已经分配给了StandBy NN
3.2 HDFS的高扩展(Federation)
Federation可解决单一命名空间的问题,提供一下特性
- HDFS集群扩展性
- 性能更高效
- 良好的隔离性
可以和HA结合起来使用