hadoop-hdfs集群安全模式详解
HDFS安全模式影响
在安全模式下,文件系统只接受读数据请求,而不接受删除、修改等变更请求
HDFS进入安全模式场景
- NameNode在加载镜像文件和编辑日志期间处于安全模式
- NameNode再接收DataNode注册时处于安全模式
- 在hdfs集群启动服务时会进入安全模式
- 在人为操作时,刻意手动执行hdfs dfsadmin -safemode enter进入安全模式
安全模式相关命令
- 查看安全模式
hdfs dfsadmin -safemode get
- 进入安全模式状
hdfs dfsadmin -safemode enter
- 离开安全模式
hdfs dfsadmin -safemode leave
- 等待安全模式状态恢复
hdfs dfsadmin -safemodewait
安全模式相关功能验证
- 当前hadoop集群状态
[wangting@wt-hadoop101 bin]$ jpsall
=============== wt-hadoop101 92.168.0.3 ===============3572 NameNode
4042 NodeManager
4220 JobHistoryServer
3695 DataNode
=============== wt-hadoop102 92.168.0.4 ===============3122 DataNode
3443 NodeManager
3325 ResourceManager
=============== wt-hadoop103 92.168.0.5 ===============3175 DataNode
3260 SecondaryNameNode
3405 NodeManager
1. 非安全模式( 正常使用模式 )
# 查看当前集群安全模式状态 OFF为关闭[wangting@wt-hadoop101 ~]$ hdfs dfsadmin -safemode get
Safe mode is OFF
# 创建一个测试文件[wangting@wt-hadoop101 ~]$ echo`date +%H%M%S`>> date.log
[wangting@wt-hadoop101 ~]$ cat date.log
173241# 将date.log文件put到hdfs集群存储上[wangting@wt-hadoop101 ~]$ hdfs dfs -put /home/wangting/date.log /
# 可以成功put并查看[wangting@wt-hadoop101 ~]$ hdfs dfs -ls /
Found 5 items
-rw-r--r-- 3 wangting supergroup 72023-01-27 17:33 /date.log
drwxr-xr-x - wangting supergroup 02023-01-16 17:14 /input
drwxr-xr-x - wangting supergroup 02023-01-17 10:29 /input202301171020
drwxr-xr-x - wangting supergroup 02023-01-16 17:26 /output
drwx------ - wangting supergroup 02023-01-16 17:26 /tmp
[wangting@wt-hadoop101 ~]$ hdfs dfs -cat /date.log
173241[wangting@wt-hadoop101 ~]$ hdfs dfsadmin -safemode get
Safe mode is OFF
# 可以成功创建目录删除目录[wangting@wt-hadoop101 ~]$ hdfs dfs -mkdir /20230127
[wangting@wt-hadoop101 ~]$ hdfs dfs -rmdir /20230127
2. 安全模式下
# 进入安全模式[wangting@wt-hadoop101 ~]$ hdfs dfsadmin -safemode enter
Safe mode is ON
# 一旦进入安全模式,无论哪个节点get状态均相同[wangting@wt-hadoop101 ~]$ hdfs dfsadmin -safemode get
Safe mode is ON
[wangting@wt-hadoop102 bin]$ hdfs dfsadmin -safemode get
Safe mode is ON
[wangting@wt-hadoop103 ~]$ hdfs dfsadmin -safemode get
Safe mode is ON
# 创建一个测试文件
wangting@wt-hadoop101 ~]$ echo`date +%H%M%S`>> date2.log
[wangting@wt-hadoop101 ~]$ cat date2.log
173849# 安全模式下put文件失败[wangting@wt-hadoop101 ~]$ hdfs dfs -put /home/wangting/date2.log /
put: Cannot create file/date2.log._COPYING_. Name node is in safe mode.
# 安全模式可以正常的查询目录[wangting@wt-hadoop101 ~]$ hdfs dfs -ls /
Found 5 items
-rw-r--r-- 3 wangting supergroup 72023-01-27 17:33 /date.log
drwxr-xr-x - wangting supergroup 02023-01-16 17:14 /input
drwxr-xr-x - wangting supergroup 02023-01-17 10:29 /input202301171020
drwxr-xr-x - wangting supergroup 02023-01-16 17:26 /output
drwx------ - wangting supergroup 02023-01-16 17:26 /tmp
# 安全模式可以正常的查看文件内容[wangting@wt-hadoop101 ~]$ hdfs dfs -cat /date.log
173241# 安全模式也可以get获取文件到本地[wangting@wt-hadoop101 ~]$ mkdir /home/wangting/test
[wangting@wt-hadoop101 ~]$ hdfs dfs -get /date.log /home/wangting/test/
[wangting@wt-hadoop101 ~]$ ls /home/wangting/test/
date.log
[wangting@wt-hadoop101 ~]$ cat /home/wangting/test/date.log
173241# 安全模式删除操作报错[wangting@wt-hadoop101 ~]$ hdfs dfs -rm /date.log
rm: Cannot delete /date.log. Name node is in safe mode.
# 安全模式创建目录失败[wangting@wt-hadoop101 ~]$ hdfs dfs -mkdir /20230127
mkdir: Cannot create directory /20230127. Name node is in safe mode.
3. 退出安全模式
# 参数leave退出[wangting@wt-hadoop101 ~]$ hdfs dfsadmin -safemode leave
Safe mode is OFF
# 退出则回到非安全模式,所以操作均为正常执行[wangting@wt-hadoop101 ~]$ hdfs dfs -put /home/wangting/date2.log /
[wangting@wt-hadoop101 ~]$ hdfs dfs -ls /
Found 6 items
-rw-r--r-- 3 wangting supergroup 72023-01-27 17:33 /date.log
-rw-r--r-- 3 wangting supergroup 72023-01-27 17:56 /date2.log
drwxr-xr-x - wangting supergroup 02023-01-16 17:14 /input
drwxr-xr-x - wangting supergroup 02023-01-17 10:29 /input202301171020
drwxr-xr-x - wangting supergroup 02023-01-16 17:26 /output
drwx------ - wangting supergroup 02023-01-16 17:26 /tmp
4. 等待安全模式状态恢复
# 进入安全模式[wangting@wt-hadoop101 ~]$ hdfs dfsadmin -safemode enter
Safe mode is ON
# 切换另一个节点(或者重新打开一个回话栏)# 执行wait相关命令 (&&表示前者命令执行完毕或者成功获取到状态才执行后续命令)# 此时命令没有任何返回,说明卡在wait等待中[wangting@wt-hadoop102 ~]$ hdfs dfsadmin -safemodewait&&echo"hdfs安全模式已经退出"&& hdfs dfs -put /home/wangting/date3.log /
# 回到原窗口将安全模式退出[wangting@wt-hadoop101 ~]$ hdfs dfsadmin -safemode leave
Safe mode is OFF
# 此时查看验证命令,put操作也执行成功[wangting@wt-hadoop102 ~]$ hdfs dfsadmin -safemodewait&&echo"hdfs安全模式已经退出"&& hdfs dfs -put /home/wangting/date3.log /
Safe mode is OFF
hdfs安全模式已经退出
安全模式相关配置
hdfs-site.xml配置文件
<property><name>dfs.namenode.safemode.min.datanodes </name><value>0</value></property>
参数含义:dfs.namenode.safemode.min.datanodes: 表示离开安全模式的最小可用 datanode 数量要求,默认为 0,即使所有 datanode 都不可用,仍然可以离开安全模式;
例如datanode节点较多,设置为3时,则必须要有三个datanode可用才退出安全模式
<property><name>dfs.namenode.safemode.threshold-pct</name><value>0.999f</value></property>
参数含义:
达到最小副本数的数据块的百分比。默认值0.999f。当小于这个比例,那就将系统切换成安全模式,对数据块进行复制;当大于该比例时,就离开安全模式,说明系统有足够的数据块副本数,可以对外提供服务
如果是为了防止某些异常数据导致始终校验不过的情况,可以尝试将上面的dfs.namenode.safemode.threshold-pct参数调为0或比0小的值后重启NameNode使之生效,这样永远不会进入安全模式
版权归原作者 王亭_666 所有, 如有侵权,请联系我们删除。