HDFS的概念和特性
HDFS的命令行操作
HDFS工作机制
HDFS写数据流程
HDFS读数据流程
Namenode工作机制
Checkpoint
Safemode
HDFS的概念和特性
- 首先,它是一个
文件系统
,用于存储文件,通过统一的命名空间—目录树来定位文件 - 其次,它是
分布式
的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色 - 重要特性如下:
- HDFS中的文件在物理上是分块存储(
block
),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在hadoop2.x
版本中是128M
,老版本是64M
- HDFS文件系统会给客户端提供统一的抽象的
目录树
,客户端通过路径来访问文件,如:hdfs://namenode:port/dir_a/file - 目录结构及文件分块位置信息(
元数据
)的管理由Namenode
节点承担
Namenode是HDFS集群主节点
,负责维护整个HDFS文件系统的目录树
,以及每个文件路径所对应的block块信息
(block id ,及所在的datanode服务器) - 文件的各个block的存储管理由
Datanode
节点承担
datanode是HDFS集群的从节点
,每个block都可以在多个datanode上存储多个副本
(副本数量也可以通过参数设置dfs.replication,默认3
) - HDFS是适应
一次写入,多次读出
的场景,且不支持文件的修改
- HDFS中的文件在物理上是分块存储(
- 注:适合用来做
数据分析
,并不适合用来做网盘应用 - 原因:不便修改,延迟大,网络开销大,成本太高
HDFS的命令行操作
- 从本地剪切粘贴到hdfs
-moveFromLocal
- 从hdfs剪切粘贴到本地
-moveToLocal
- 追加一个文件到已经存在的文件末尾
-appendToFile
- 从本地文件系统拷贝到hdfs
-copyFromLocal
- 从hdfs拷贝到本地
-copyToLocal
- 合并下载多个文件
getmerge
- 设置hdfs中文件的副本数量
-setrep
ex:hadoop fs -setrep 数 文件路径
- 查看集群工作状态
hdfs dfsadmin -report
HDFS工作机制
- HDFS集群分为两大角色:
NameNode
,DataNode
(SecondaryNode
) NameNode
负责管理整个文件系统的元数据
DataNode
负责管理用户的文件数据块
- 文件会按照固定的大小
blocksize
切成若干块后分布式存储在若干台DataNode
上 - 每个文件块可以有多个
副本
,并存放在不同的DataNode
上
*DataNode
会定期向NameNode
汇报自身所保存的文件block信息
,而NameNode
则会负责保持文件的副本数量
- HDFS的内部工作机制对客户端保持透明,
客户端
请求访问HDFS都是通过向NameNode
申请来进行
HDFS写数据流程
Client
与NameNode通信请求上传文件
,NameNode检查
目标文件是否已存在,父目录是否存在- NameNode返回是否
可以上传
- client请求
第一个block
该传输到哪些DataNode服务器
上 - NameNode返回
3个DataNode服务器
ABC - client请求3台dn中的一台
A上传数据
(本质上是一个RPC
调用,建立pipeline
),A收到请求会继续调用B
,然后B调用C
,将整个pipeline建立
完成,以packet为单位,A
收到一个packet
就会传给B
,B
传给C
,A每传一个packet就会放入一个应答队列等待应答
- 当一个
block传输完成
之后,client再次请求NameNode上传第二个
block的服务器
HDFS读数据流程
Client
跟NameNode
通信查询元数据
,找到文件块
所在的DataNode服务器
- 挑选
一台DataNode
(就近原则
,然后随机)服务器,请求建立socket流
- DataNode开始
发送数据
(从磁盘读取数据放入流,以packet为单位
来做md5校验
) - client以packet为单位
接收
,先在本地缓存
(因为还没接受完整个文件),然后写入目标文件
直到所有块都接收成功返回给客户端
- 注:就近原则
网络拓扑中最近的一台机器
备份
除了本机一份,与本机同机架一份,另一个机架一份,默认三份
Namenode工作机制
- NameNode职责
- 负责客户端请求的
响应
- 负责
元数据管理
- 目录树
- DataNode信息池
- 负责客户端请求的
- 元数据管理
NameNode
对数据
的管理采用三种存储形式
- 内存元数据
NameSystem
- 磁盘元数据镜像文件
fsimage
- 数据操作日志文件
edits
- 内存元数据
- 元数据存储机制
内存
中有一份完整的元数据
matedata磁盘
有一个准完整元数据镜像
,文件在NameNode工作目录中操作日志
用于衔接
内存和持久化
数据镜像
- 注:当
客户端
对HDFS中的文件
进行新增或者修改操作
,操作记录首先记入edits
日志文件中,当客户端操作成功
后,相应的元数据会更新到内存
matedata中 - 元数据checkpoint
每隔一段时间,会由SecondaryNameNode
上积累所有edits
和一个最新的fsimage
下载到本地,并加载到内存
进行merge
,这个过程称为checkpoint
Checkpoint
-
checkpoint操作触发条件可配置
-
时间间隔
dfs.namenode.checkpoint.period=3600
单位s -
操作记录间隔
dfs.namenode.checkpoint.txns=1000000
-
-
checkpoint附带作用
NameNode
和SecondaryNameNode
工作目录存储结构
完全相同
,当NameNode故障
退出需要重新恢复时,可以从SeconaryNameNode
的工作目录中将fsimage拷贝
到NameNode
的工作目录,以恢复
NameNode的元数据
Safemode
- NameNode发现集群中
block丢失率
达到一定比例0.01%
会进入安全模式
safemdoe,在安全模式下,客户端
不能对任何数据进行操作,只能查看
元数据信息 - 在HDFS
冷启动
时,NameNode
会在safemode状态
下维持一段时间,等待自动退出
安全模式即可原理:
NameNode
的内存元数据中,包含文件路径,副本数,blockid及每个block所在DataNode的信息
,而fsimage
中,不包含block所在DataNode信息
。那么,当NameNode冷启动
时,此时内存中的元数据只能从fsimage中加载
而来,从而就没有block所在的DataNode信息
——>导致NameNode认为所有的block都已经丢失
——>进入安全模式
——>DataNode启动
后,会定期向NameNode汇报
自身所持有的blockid信息 ——>随着DataNode陆续启动
,从而陆续汇报block信息
,NameNode
就会将内存元数据
中block所在DataNode信息补全更新
——> 找到所有block的位置,从而自动退出安全模式
- 手动退出
safemode:hdfs namenode --safemode leave