> 文章列表 > 大数据3 -Hadoop HDFS-分布式文件系统

大数据3 -Hadoop HDFS-分布式文件系统

大数据3 -Hadoop HDFS-分布式文件系统

目录

1.为什么需要分布式存储?

2. HDFS的基础架构

3. HDFS存储原理

4. NameNode是如何管理Block块的

5. HDFS数据的读写流程 



1.为什么需要分布式存储?

数据量太大,单机存储能力有上限,需要靠数量来解决问题
数量的提升带来的是网络传输、磁盘读写、CPU、内存等各方面的综合提升。 分布式组合在一起可以达到1+1>2的效果

大数据体系中,分布式的调度主要有2类架构模式

去中心化模式

       中心化模式 

去中心化模式,没有明确的中心。

众多服务器之间基于特定规则进行同步协调。

大数据框架,大多数的基础架构上,都是符合:中心化模式的

即:有一个中心节点(服务器)来统筹其它服务器的工作,统一指挥,统一调派,避免混乱。

这种模式,也被称之为:一主多从模式,简称主从模式(Master And Slaves

主从模式(中心化模式)在现实生活中同样很常见:

公司企业管理
组织管理
行政管理
等等

Hadoop框架,就是一个典型的主从模式(中心化模式)架构的技术框架。

总结:

1. 分布式系统常见的组织形式?

去中心化模式:没有明确中心,大家协调工作
中心化模式:有明确的中心,基于中心节点分配工作

2. 什么是主从模式?

主从模式(Master-Slaves)就是中心化模式,表示有一个主节点来作为管理者,管理协调下属一批从节点工作。

3. Hadoop是哪种模式?

主从模式(中心化模式)的架构

2. HDFS的基础架构

HDFSHadoop三大组件(HDFSMapReduceYARN)之一

全称是:Hadoop Distributed File SystemHadoop分布式文件系统)
Hadoop技术栈内提供的分布式数据存储解决方案
可以在多台服务器上构建存储集群,存储海量的数据

 HDFS的基础架构:

NameNode

HDFS系统的主角色,是一个独立的进程
负责管理HDFS整个文件系统
负责管理DataNode

SecondaryNameNode

NameNode的辅助,是一个独立进程
主要帮助NameNode完成元数据整理工作(打杂)

DataNode

HDFS系统的从角色,是一个独立进程
主要负责数据的存储,即存入数据和取出数据

3. HDFS存储原理

4. NameNode是如何管理Block块的

edits文件

hdfs中,文件是被划分了一堆堆的block块,那如果文件很大、以及文件很多,Hadoop是如何记录和整理文件和block块的关系呢?

答案就在于NameNode

NameNode基于一批edits和一个fsimage文件的配合

完成整个文件系统的管理和维护

edits记录每一次HDFS的操作

逐渐变得越来越大

 

问题在于,当用户想要查看某文件内容

如:/tmp/data/test.txt

就需要在全部的edits中搜索

(还需要按顺序从头到尾,避免后期改名或删除)

效率非常低

需要合并edits文件,得到最终的结果

fsimage文件

NameNode元数据管理维护

NameNode基于editsFSImage的配合,完成整个文件系统文件的管理。

1. 每次对HDFS的操作,均被edits文件记录

2. edits达到大小上线后,开启新的edits记录

3. 定期进行edits的合并操作

如当前没有fsimage文件,  将全部edits合并为第一个fsimage
如当前已存在fsimage文件,将全部edits和已存在的fsimage进行合并,形成新的fsimage

5. 重复123流程

 元数据合并控制参数

对于元数据的合并,是一个定时过程,基于:

dfs.namenode.checkpoint.period,默认3600(秒)即1小时
dfs.namenode.checkpoint.txns,默认1000000,即100W次事务

只要有一个达到条件就执行。

检查是否达到条件,默认60秒检查一次,基于:

dfs.namenode.checkpoint.check.period,默认60(秒),来决定

SecondaryNameNode的作用

对于元数据的合并,还记得HDFS集群有一个辅助角色:SecondaryNameNode吗?

没错,合并元数据的事情就是它干的

SecondaryNameNode会通过httpNameNode拉取数据(editsfsimage

然后合并完成后提供给NameNode使用。

1. NameNode基于

edits记录每次操作
fsimage,记录某一个时间节点前的当前文件系统全部文件的状态和信息

维护整个文件系统元数据

2. edits文件会被合并到fsimage中,这个合并由:

SecondaryNameNode来操作

3. fsimage记录的内容是

5. HDFS数据的读写流程 

1. 客户端NameNode发起请求

2. NameNode审核权限、剩余空间后,满足条件允许写入,并告知客户端写入的DataNode地址

3. 客户端向指定的DataNode发送数据包

4. 被写入数据的DataNode同时完成数据副本的复制工作,将其接收的数据分发给其它DataNode

5. 如上图,DataNode1复制给DataNode2,然后基于DataNode2复制给Datanode3DataNode4

6. 写入完成客户端通知NameNodeNameNode做元数据记录工作

 读:

关键信息点:

NameNode不负责数据写入,只负责元数据记录和权限审批
客户端直接1DataNode写数据,这个DataNode一般是离客户端最近(网络距离)的那一个
数据块副本的复制工作,DataNode之间自行完成(构建一个PipLine,按顺序复制分发,如图12, 234

写:

关键点:

1、数据同样不通过NameNode提供

2NameNode提供的block列表,会基于网络距离计算尽量提供离客户端最近的

这是因为1block3份,会尽量找离客户端最近的那一份让其读取

1、客户端向NameNode申请读取某文件

2 NameNode判断客户端权限等细节后,允许读取,并返回此文件的block列表

3、客户端拿到block列表后自行寻找DataNode读取即可

1、对于客户端读取HDFS数据的流程中,一定要知道

不论读、还是写,NameNode都不经手数据,均是客户端和DataNode直接通讯

不然对NameNode压力太大

2、写入和读取的流程,简单来说就是:

NameNode做授权判断(是否能写、是否能读)
客户端直连DataNode进行写入(由DataNode自己完成副本复制)、客户端直连DataNode进行block读取
写入,客户端会被分配找离自己最近的DataNode写数据
读取,客户端拿到的block列表,会是网络距离最近的一份

3、网络距离

最近的距离就是在同一台机器
其次就是同一个局域网(交换机)
再其次就是跨越交换机
再其次就是跨越数据中心

HDFS内置网络距离计算算法,可以通过IP地址、路由表来推断网络距离

牛粪字体