概念
安全模式是hadoop的一种保护机制
哪些情况会进入safemode
- 启动或者重新启动hdfs时,会有一段时间自动进入安全模式
- 运维人员在进行调试时,进行HDFS维护升级时
- 可用副本/总副本数 > 99.9999% ===> 不会进安全模式;否则进安全模式
安全模式下,集群属于只读状态。
但是严格来说,只是保证HDFS元数据信息的访问,而不保证文件的访问,因为文件的组成Block信息此时NameNode还不一定已经知道了。所以只有NameNode已了解了Block信息的文件才能独到。而安全模式下任何对HDFS有更新的操作都会失败。
对于全新创建的HDFS集群,NameNode启动后不会进入安全模式,因为没有Block信息。
命令
查询当前是否为安全模式
hdfs dfsadmin -safemode get
等待safemode关闭,以便后续操作
hdfs dfsadmin -safemode wait
退出安全模式
hdfs dfsadmin -safemode leave
启用安全模式
hdfs dfsadmin -safemode enter
相关配置
属性 | 描述 |
---|---|
dfs.namenode.replication.min | NameNode中设定所需要的数据块最低复制份数。只有大于等于这个值,才会认为块是有效的,默认为1。 |
dfs.namenode.safemode.threshold-pct | 参数指定满足dfs.namenode.replication.min复制份数要求的Block数量的比率,超过这个比率后NameNode才能脱离安全模式。若小于0,则不需要等待DataNode的块报告就离开SafeMode,这会使得数据完整性无法保证;若大于1,则永远处于安全模式,默认为0.999f。 |
dfs.namenode.safemode.extension | 安全模式的延期时间,即到达dfs.namenode.safemode.threshold-pct设置的阈值后,会再等待这么长时间,可以认为是等待一个稳定的集群环境,默认3000,单位毫秒。 |
dfs.namenode.safemode.min.datanodes | 设置NameNode退出安全模式前确认活跃的DataNode数量。小于等于0表示不考虑活跃DataNode的影响,大于集群中DataNode总数则使得永远处于安全模式,默认0。 |
自检
hdfs fsck /
hdfs fsck
Usage:DFSck <path> [-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]]
<path> 检查这个目录中的文件是否完整
-move 破损的文件移至/lost+found目录
-delete 删除破损的文件
-openforwrite 打印正在打开写操作的文件
-files 打印正在check的文件名
-blocks 打印block报告(需要和-files参数一起使用)
-locations 打印每个block的位置信息(需要和-files参数一起使用)
-racks 打印位置信息的网络拓扑图(需要和-files参数一起使用)