hadoop-hdfs集群安全模式详解

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 -safemode wait

安全模式相关功能验证

  • 当前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          7 2023-01-27 17:33 /date.log
drwxr-xr-x   - wangting supergroup          0 2023-01-16 17:14 /input
drwxr-xr-x   - wangting supergroup          0 2023-01-17 10:29 /input202301171020
drwxr-xr-x   - wangting supergroup          0 2023-01-16 17:26 /output
drwx------   - wangting supergroup          0 2023-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          7 2023-01-27 17:33 /date.log
drwxr-xr-x   - wangting supergroup          0 2023-01-16 17:14 /input
drwxr-xr-x   - wangting supergroup          0 2023-01-17 10:29 /input202301171020
drwxr-xr-x   - wangting supergroup          0 2023-01-16 17:26 /output
drwx------   - wangting supergroup          0 2023-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          7 2023-01-27 17:33 /date.log
-rw-r--r--   3 wangting supergroup          7 2023-01-27 17:56 /date2.log
drwxr-xr-x   - wangting supergroup          0 2023-01-16 17:14 /input
drwxr-xr-x   - wangting supergroup          0 2023-01-17 10:29 /input202301171020
drwxr-xr-x   - wangting supergroup          0 2023-01-16 17:26 /output
drwx------   - wangting supergroup          0 2023-01-16 17:26 /tmp

4. 等待安全模式状态恢复

# 进入安全模式
[wangting@wt-hadoop101 ~]$ hdfs dfsadmin -safemode enter
Safe mode is ON

# 切换另一个节点(或者重新打开一个回话栏)
# 执行wait相关命令 (&&表示前者命令执行完毕或者成功获取到状态才执行后续命令)
# 此时命令没有任何返回,说明卡在wait等待中
[wangting@wt-hadoop102 ~]$ hdfs dfsadmin -safemode wait && 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 -safemode wait && 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使之生效,这样永远不会进入安全模式


猜你喜欢

转载自blog.csdn.net/wt334502157/article/details/128772115