hadoop理论课-第三章HDFS


第三章HDFS

HDFS简介

HDFS是Google公司的GFS分布式文件系统的开源实现

HDFS是Apache Hadoop项目的一个子项目

支持海量数据存储,成百上千的计算机组成存储集群

HDFS可以在低成本的硬件之上,具有高容错,高可靠性,高扩展,高吞吐率等特征

非常适合大规模数据集的应用

HDFS的生态圈

GGoFIJ.png

HDFS优点

高容错性

数据自动保存多个副本

副本丢失后,自动恢复

适合批处理

移动计算而非移动数据

移动位置暴露给计算框架

适合大数据处理

GB, TB, 甚至PB级数据

百万规模以上的文件数量

10k+节点

支持流式文件访问

一次写入,多次读取

保证数据一致性

可构建在廉价机器上

通过多副本提高可靠性

提供容错和恢复机制

HDFS缺点

不适合低延迟数据访问

比如毫秒级

低延迟与高吞吐率

不适合小文件存取

占用NameNode大量内存

寻找时间超过读取时间

不适合并发写入,文件随机修改

一个文件只能有一个写入者

仅支持append(附加)

HDFS的组成与架构

HDFS基本组件

GGbSfJ.png
NameNode
GGbXjI.png

edits是日志文件,包含一条条edit log; fsimage是最终结果

GJec5D.png
DataNode
数据块
GJmfFU.png
分块原因
  • 一个巨大文件一块磁盘空间不够
  • 利于备份
  • 提高吞吐量(并发读写,计算,利用不同节点存储,减少一个节点的负载)
DataNode的主要职责

GJuBKs.png

机架感知与副本冗余存储策略
GJ3Ebd.md.png

GJ3eUI.md.png

Secondary NameNode
Secondary NameNode的职责

GJ84f0.png

secondary namenode和namenode占用同样大的内存大小;在不同节点上

Secondary NameNode工作流程

GJGbgf.png

检查点

image-20200402153039014

问题

GJt0Hg.png

答案:edits。因为现在的fsimage保存的是最新也就是最近检查节点产生的fsimage;而现在的edits文件是保存的最近检查节点产生fsimage以来,Hdfs的操作信息

HDFS架构

GGbBn0.png

操作HDFS

HDFS web访问

  • IP:50070访问NameNode

  • IP:50090访问SecondaryNameNode

HDFS shell访问

操作命令

管理命令

其它命令

GJWkfx.png

Hadoop中三种shell命令

GJ4lN9.png

JAVA API端口访问

GJ4o3q.png

GJIMWR.png

GJ770f.png

HDFS工作原理

HDFS写文件流程

GdIN1e.md.png
GdItpD.md.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Client客户端发送上传请求,通过RPC与NameNode建立通信,NameNode检查该用户是否有上传权限,以及上传的文件是否在HDFS对应的目录下重名,如果这两者有任意一个不满足,则直接报错,如果两者都满足,则返回给客户端一个可以上传的信息;

Client根据文件的大小进行切分,默认128M一块,切分完成之后给NameNode发送请求第一个block块上传到哪些服务器上;

NameNode收到请求之后,根据网络拓扑和机架感知以及副本机制进行文件分配,返回可用的DataNode的地址;

注:Hadoop在设计时考虑到数据的安全与高效, 数据文件默认在HDFS上存放三份, 存储策略为本地一份,同机架内其它某一节点上一份, 不同机架的某一节点上一份。

客户端收到地址之后与服务器地址列表中的一个节点如A进行通信,本质上就是RPC调用,建立pipeline,A收到请求后会继续调用B,B在调用C,将整个pipeline建立完成,逐级返回Client;

Client开始向A上发送第一个block(先从磁盘读取数据然后放到本地内存缓存),以packet(数据包,64kb)为单位,A收到一个packet就会发送给B,然后B发送给C,A每传完一个packet就会放入一个应答队列等待应答;

数据被分割成一个个的packet数据包在pipeline上依次传输,在pipeline反向传输中,逐个发送ack(命令正确应答),最终由pipeline中第一个DataNode节点A将pipelineack发送给Client;

当一个block传输完成之后, Client再次请求NameNode上传第二个block,NameNode重新选择三台DataNode给Client。

HDFS读文件流程

GdoSN6.md.png

HDFS容错

GdIzAx.md.png

NameNode出错

Gdojxg.md.png

DataNode出错

GdoxMQ.md.png

数据出错

Gd7rA1.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Client向NameNode发送RPC请求。请求文件block的位置;

NameNode收到请求之后会检查用户权限以及是否有这个文件,如果都符合,则会视情况返回部分或全部的block列表,对于每个block,NameNode都会返回含有该block副本的DataNode地址;这些返回的DataNode地址,会按照集群拓扑结构得出DataNode与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离 Client 近的排靠前;心跳机制中超时汇报的DataNode状态为STALE,这样的排靠后;

Client选取排序靠前的DataNode来读取block,如果客户端本身就是DataNode,那么将从本地直接获取数据(短路读取特性);

底层上本质是建立Socket Stream(FSDataInputStream),重复的调用父类DataInputStream的read方法,直到这个块上的数据读取完毕;

当读完列表的block后,若文件读取还没有结束,客户端会继续向NameNode 获取下一批的block列表;

读取完一个block都会进行checksum验证,如果读取DataNode时出现错误,客户端会通知NameNode,然后再从下一个拥有该block副本的DataNode 继续读;

read方法是并行的读取block信息,不是一块一块的读取;NameNode只是返回Client请求包含块的DataNode地址,并不是返回请求块的数据;

最终读取来所有的block会合并成一个完整的最终文件;

HDFS的高级功能

安全模式

GwS9eK.png

回收站

GwSVSA.png

快照

GwStO0.png

配额

GwSsp9.png

HA(High Availability高可用)

Gwpn39.png

GwpBHf.md.png
GwprE8.md.png

联邦Federation

HDFS使用过程存在的问题

Gw9nIS.png

什么是Federation

Gw9ma8.md.png

联邦的优点

Gw9fRH.png

HA与Federation的区别

GwC9e0.png


直道相思了无益,未妨惆怅是清狂。

本文标题:hadoop理论课-第三章HDFS

文章作者:TTYONG

发布时间:2020年04月02日 - 11:04

最后更新:2023年06月09日 - 18:06

原始链接:http://tianyong.fun/hadoop%E5%A4%A7%E6%95%B0%E6%8D%AE%E6%8A%80%E6%9C%AF%E4%B8%8E%E5%BA%94%E7%94%A8-%E7%AC%AC%E4%B8%89%E7%AB%A0HDFS(%E7%90%86%E8%AE%BA%E8%AF%BE).html

许可协议: 转载请保留原文链接及作者。

多少都是爱
0%