HDFS:伪分布式
1 block块
参数为 dfs.blocksize 默认为128M
例如:
1个文件130M,存在HDFS上存储为两个块
一个128M
一个2M
2 副本数
指的是一个块存在的复制数量
参数为:dfs.replication 默认为3
面试题:
一个文件160M,副本数为2,块大小为128M。
实际存储空间是多少?
块数量是多少?
答:一共4个块 实际存储为320M
3 HDFS架构
NN:namenode 主 名称节点
DN:datanode 从 数据节点
SNN:secondnamenode 第二名称节点 为NN的热备
NameNode:文件系统的命名空间
a.文件名称
b.文件目录结构
c.文件属性(创建时间 权限 副本数)
d.文件对应哪些数据块 —》数据块对应分布到哪些datanode节点上
namenode节点不会持久化存储这种映射关系,集群在启动和运行时,datanode定期发送blockreport给namenode,namenode以此动态维护这种映射关系。
作用:
管理文件系统的命名空间
维护文件系统树,以两种文件永久保存在磁盘
两种文件分别为:
命名空间镜像文件fsimage
编辑日志editlog
DataNode:存储数据块和块的校验和
与NN通信:netty
a 每隔3秒发送一个心跳包
b 每10次心跳发送给一个blockReport
主要作用:
文件数据块的读写
SecondaryNameNode
存储:fsimage + editlog
作用:定期合并fsimage + editlog为新的fsimage,推送给NN,称为检查点checkpoint
参数:
dfs.namenode.checkpoint.period:3600s
fsimage : 镜像文件
editlog : 操作日志
4 副本放置策略
数据是以块存储在datanode节点
第一个副本:
假设提交文件的机器就是datanode节点,那么第一个块就存储在本节点上。如果不是,就随机挑选一台磁盘不太满的,cpu不太繁忙的节点
第二个副本:
放置在与第一个副本不同的机架的节点上
第三个副本:
与第二个副本相同的机架不同的节点上
5 安全模式
Namenode启动后会进入一个称为安全模式的特殊状态。处于安全模式的Namenode是不会进行数据块的复制的。Namenode从所有的 Datanode接收心跳信号和块状态报告。块状态报告包括了某个Datanode所有的数据块列表。每个数据块都有一个指定的最小副本数。当Namenode检测确认某个数据块的副本数目达到这个最小值,那么该数据块就会被认为是副本安全(safely replicated)的;在一定百分比(这个参数可配置)的数据块被Namenode检测确认是安全之后(加上一个额外的30秒等待时间),Namenode将退出安全模式状态。接下来它会确定还有哪些数据块的副本没有达到指定数目,并将这些数据块复制到其他Datanode上。
查看集群状态
hdfs dfsadmin -report
安全模式的相关操作
hdfs dfsadmin -safemode <enter | leave | get | wait>]
1、如果是人工进人安全模式,代表集群是只读状态,可以做维护,做完维护后leave
2、异常情况,比如hdfs损坏,nn节点自动进入安全模式
a.手工尝试的去leave 成功, 进入正常的
b.手工尝试的去leave 不成功,那么仔细去看NN节点的log日志,去分析原因