安全模式

集群启动时的一个状态

  • 安全模式是HDFS的一种工作状态,处于安全模式的状态下,只向客户端提供文件的只读视图,不接受对命名空间的修改;同时NameNode节点也不会进行数据块的复制或者删除

NameNode启动时

  1. 首先将镜像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。

  2. 一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件和一个空的编辑日志。

  3. NameNode开始监听RPC和Http请求。

  4. 此时NameNode处于安全模式,只接受客户端的读请求。

系统中的数据块的位置并不是由NameNode维护的,而是以块列表的形式存储在DataNode中。

安全模式下

  1. 安全模式下,各个DataNode会向NameNode发送自身的数据块列表当NameNode有足够的数据块信息后,便在30秒后退出安全模式
  2. NameNode发现数据节点过少会启动数据块复制过程

如果NN收集的Block信息没有达到最少副本数,就会将缺失的副本,从有的DN上拷贝到其他DN

  1. dfs.replication.min=2

  2. 但是默认最低副本数为1

  3. 在拷贝的过程中系统还是处于安全模式

安全模式相关命令

hdfs dfsadmin -safemode leave	强制NameNode退出安全模式
hdfs dfsadmin -safemode enter	进入安全模式
hdfs dfsadmin -safemode get		查看安全模式状态
hdfs dfsadmin -safemode wait	等待一直到安全模式结束

HDFS的权限

HDFS对权限的控制

  • 只能防止好人做错事

  • 不能防止坏人做坏事

你告诉他你是谁,他就认为你是谁!(天真无邪的Hadoop)

机架感知策略

节点距离

distance(/D1/R1/H1,/D1/R1/H1)=0 相同的datanode

distance(/D1/R1/H1,/D1/R1/H3)=2 同一rack下的不同datanode

distance(/D1/R1/H1,/D1/R2/H4)=4 同一IDC下的不同datanode

distance(/D1/R1/H1,/D2/R3/H7)=6 不同IDC下的datanode

机架感知

机架感知(rack awareness)是为了保证副本在集群的安全性

我们需要将副本放在不同的DN节点上,节点也需要一定的考量

  • 可靠性、可用性、带宽消耗

第一个节点

  • 集群内部(优先考虑和客户端相同节点作为第一个节点)

  • 集群外部(选择资源丰富且不繁忙的节点为第一个节点)

第二个节点

  • 选择和第一个节点不同机架的其他节点

第三个节点

  • 与第二个节点相同机架的其他节点

第N个节点

  • 与前面节点不重复的其他节点