hdfs支持主从结构,主节点NameNode,SecondaryNameNode。支持多个从节点称为DataNode,支持多个
NameNode是整个文件系统的管理节点(老板)
主要维护整个文件系统的文件目录树,文件/目录的信息每个文件对应的数据块列表,并且还负责接收用户操作请求。
NameNode主要包含以下文件:
Fsimage: 元数据镜像文件,存储某一时刻NameNode内存中的元数据信息,就类似是定时做了一个快照操作
edits : 做的是数据记录,记录上传,删除等操作
seed_txid:
version
NameNode维护了两份关系
第一份关系:File与Block list的关系
第二份关系:DataNode与Block的关系
SecondaryNameNode(秘书)
主要负责定期把edits文件中的内容合并到fsimage中
这个合并操作称为checkpoint,在合并的时候对edits中的内容进行转换,生成新的内容保存到fsimage文件中
DataNode(员工)
提供真实文件数据的存储服务
HDFS会按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称为一个Block,HDFS默认Block大小是128MB
当集群启动的时候会把自己当前的节点信息和这个节点上面所有的block块信息告诉给NameNode,动态加载,数据越多,加载越慢
hdfs回收站
默认没有开启的,开启后,默认有个保存周期,过期会被彻底删除
core-site.xml 添加如下配置
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
scp -rq core-site.xml bigdata02:/data/soft/hadoop-3.2.0/etc/hadoop/
Hdfs dfs -rm -skipTrash /user.txt 直接删除不进回收站
hdfs为每个用户创建一个回收站目录:/user/用户名/.Trash/
Hdfs 安全模式
集群刚启动时hdfs会进入安全模式,此时无法执行写操作
hdfs dfsadmin -safemode get 查看安全模式
Hdfs dfsadmin -safemode leave 离开安全模式
定时上传数据到hdfs
Sh 脚本
#!/bin/bash
yesterday=$1
if ["yesterday"=""]
then
yesterday=`date +%Y_%m_%d --date="1 days ago"`
fi
#日志文件目录
logPath=/data/log/access_${yesterday}.log
#时间格式化为ymd,hdfs目录
hdfsPath=/log/${yesterday//_/}
#hdfs创建目录
hdfs dfs -mkdir -p ${hdfsPath}
#上传文件到hdfs
hdfs dfs -put ${logPath} ${hdfsPath}
启动sh 脚本命令
sh -x uploadLogData.sh
sh -x uploadLogData.sh 2021_08_01
定时执行脚本
0 1 * * * root sh /data/shell/uploadLogData.sh >> /data/shell /uploadLogData.log
Hdfs 的高可用和高扩展
高可用,HA,结合注册中心实现
高扩展,Federation,可解决单一命名空间的一些问题,提供以下特性