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日志,去分析原因