持久数据结构
dfs.namenode.name.dir目录结构
VERSION
> nameSpaceID:文件系统命名空间的唯一标识符,首次格式化namenode时创建
> clusterID:给集群赋予唯一标识符
> cTime属性标记了存储系统的创建时间,系统升级后会更新
> storageType:存储目录包含的是namenode的数据结构
> layoutVersion:负整数,持久数据结构的版本
in_use.lock
> 锁文件,使用in_use.lock给存储目录加锁,避免同时使用同一个目录
fsimage和edit log
> 客户端执行写操作时,首先记录到编辑日志中,当编辑日志被修改时,内存中元数据信息也更新。向客户端发送成功代码之前,要将所有写操作更新并同步到每个副本,确保事务不会丢失
> 辅助namenode设置检查点合并编辑日志
1) 辅助namenode请求主namenode停止使用当前edits,写入其他新的edits
2) 辅助namenode获取主namenode的fsimage和edits文件
3) 辅助namenode将fsimage加载进内存,逐一执行edits中的事务,创建合并后的fsimage
4) 辅助namenode将合并后的fsimage返回给主namenode,替换主namenode的旧文件系统映像
> 设置检查点 1) 时间间隔 dfs.namenode.checkpoint.period 2) 编辑日志事务数量 dfs.namenode.checkpoint.txns
安全模式
> namenode启动时,将fsimage加载入内存,执行编辑日志,在内存中创建新元数据的映像后,创建一个新的fsimage和一个空的编辑日志,这个过程namenode运行在安全模式,文件系统对客户端是只读的
> 在安全模式下,各个datanode向namenode发送最新的块列表信息,了解到足够多的块位置信息后,高效运行文件系统
> 如果满足最小副本条件,则30S就退出安全模式
hdfs dfsadmin -safemode get
hdfs dfsadmin -safemode wait
hdfs dfsadmin - safemode enter
hdfs dfsadmin -safemode leave
日志审计
使用log4j的INFO级别
工具
dfsadmin:查找状态信息,执行管理操作
文件系统检查fsck:检查文件健康状态
datanode block scanner:定期检测节点块,查看是否由checksum错误
均衡器:将块从忙碌的datanode转移到空闲的datanode,重新分配块
start-balancer.sh