大数据学习05_Hadoop: HDFS工作机制
HDFS数据流
HDFS数据写入流程
节点距离计算
节点距离: 两个节点到达最近的共同祖先的距离总和
Distance(/d1/r1/n0
, /d1/r1/n0
)=0(同一节点上的进程)
Distance(/d1/r2/n0
, /d1/r3/n2
)=4(同一数据中心不同机架上的节点)
Distance(/d1/r1/n1
, /d1/r1/n2
)=2(同一机架上的不同节点)
Distance(/d1/r2/n1
, /d2/r4/n1
)=6(不同数据中心的节点)
副本存储节点选择
HDFS每个block
默认存储三个副本
第一个副本在Client所处的节点上。如果客户端在集群外,随机选一个
第二个副本和第一个副本位于相同机架,随机节点
第三个副本位于不同机架,随机节点
HDFS数据读取流程
NameNode
NN和2NN工作机制
NameNode
的元数据存储在内存上,同时在硬盘上的fsimage
文件上存储元数据的备份.
元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits
文件上.
引入一个新的节点SecondaryNamenode
,专门用于fsimage
文件和Edits
文件的合并
DataNode
DataNode工作机制
掉线判定
其中heartbeat.recheck.interval
和dfs.heartbeat.interval
都可以在hdfs-site.xml
中配置
新DataNode
服役
克隆一台新主机,删除掉data
和logs
目录下的内容后再启动DataNode
即可使新节点关联到NameNode
下.
调用start-balancer.sh
脚本可以均衡负载
旧DataNode
退役
控制DataNode
对NameNode
的访问有两种方式:黑名单
和白名单
白名单
白名单中的主机节点都被允许访问NameNode
;不在白名单的主机节点,都会被强制退出集群.
-
在
hadoop目录
下的etc/hadoop
目录下创建dfs.hosts
文件,在文件中列出DataNode白名单
hadoop102 hadoop103 hadoop104
-
在
etc/hadoop/hdfs-site.xml
中添加如下属性,指定白名单文件的位置<property> <!-- 指定白名单文件的位置 --> <name>dfs.hosts</name> <value>/opt/module/hadoop-2.7.7/etc/hadoop/dfs.hosts</value> </property>
-
在shell中刷新
NameNode
,更新ResourceManager
节点hdfs dfsadmin -refreshNodes yarn rmadmin -refreshNodes
刷新之后会发现不在白名单中的节点马上退出集群
-
均衡负载
start-balancer.sh
黑名单
黑名单上的主机都会被强制退出集群
- 在
hadoop目录
下的etc/hadoop
目录下创建dfs.hosts.exclude
文件,在文件中列出DataNode黑名单
hadoop105
- 在
etc/hadoop/hdfs-site.xml
中添加如下属性,指定黑名单文件的位置<property> <name>dfs.hosts.exclude</name> <value>/opt/module/hadoop-2.7.7/etc/hadoop/dfs.hosts.exclude</value> </property>
- 在shell中刷新
NameNode
,更新ResourceManager
节点
刷新后会发现黑名单上的节点不会马上退出集群,而是将数据拷贝到其他节点之后才退出集群.hdfs dfsadmin -refreshNodes yarn rmadmin -refreshNodes
这里是引用
- 均衡负载
start-balancer.sh