大数据分布式文件系统——HDFS

分布式文件系统

FS File System

1:文件系统是基于硬盘之上的一个文件管理的工具

2:我们用户操作文件系统可以和硬盘进行解耦

DFS Distributed File System

1:分布式文件系统

2:将我们的数据存放在多台电脑上存储

3:HDFSmapreduce计算的基础

是什么

为各类分布式运算框架提供数据存储服务

文件切分思想

文件存放在一个磁盘上效率肯定是低的

1:读取效率

2:如果文件特别大会超出单机的存储范围

字节数组

1:如果文件特别大会超出单机的存储范围

2:数组可以拆分和组装,源文件不会受到影响

切分数据

对字节数组进行切分

拼接数据

按照数组的偏移量将数据连接

偏移量

1:当前数据存储在数组中的绝对路径

2:数组都会有索引,可以快速定位到数据的位置

数据存储原理

1:不管文件的的大小,所有的文件都是由字节数组构成

2:如果我们要切分文件,就是将一个字节数组分成多份

3:我们将切分后的数据拼接到一起,数据可以继续使用

4:我们需要根据数据的偏移量将他们重新拼接到一起

Block切分标准

1:拆分的数据块等大

(1):数据计算的时候简化问题的复杂度

        进行分布式算法设计的时候,数据不统一,算法很难设计

(2):数据拉取的时候时间相对一致

(3):通过偏移量就知道这个块的位置

(4):相同文件,分成的数据块大小应该相等

2:数据块
1:数据被切分后的一个整体称之为块
2:在 H1 默认大小为 64M, H2 及其以后默认大小为 128M
3:同一个文件中,每个数据块大小要一致除了最后一个节点外
        (1):
                不同文件中,块的大小可以不一致
                文件大小不同可以设置不同的块的数量
4:真实情况下,会根据文件大小和集群节点的数量综合考虑块的大小
5: 数据块的个数 =Ceil 文件大小 / 每个块的大小)
HDFS中一旦文件被存储,数据不允许被修改
修改会影响偏移量
修改会导致数据倾斜
修改数据会导致蝴蝶效益
一般HDFS存储的都是历史数据。所以 将来Hadoopmr都用来进行离线数据的处理
块的大小一旦文件上传之后就不允许被修改

128MB-512MB

Block 数据安全
1:肯定要对存储数据做备份 :
2: 备份的数据肯定不能存放在一个节点上
        (1):使用数据的时候可以就近获取数据
3: 所以备份的数量要小于等于节点的数量
4:每个数据块会有 3 个副本,相同副本是不会存放在同一个节点上
5: 副本的数量可以变更
        (1): 可能近期的数据被分析的可能性跟大,副本数可以多设置几个
        (2):后期数据很少被分析,可以减少副本数

Block的管理效率

需要专门给节点进行分工

1:存储 DataNode
2:记录 NameNode
3: 日志 secondaryNameNode

作用

 Hadoop是专为从单一服务器到上千台机器扩展,每个机器都可以提供本地计算和存储。HDFS作为Hadoop生态中的一员,将数据分布式存储

为什么要用hdfs?

分而治之,将大文件,大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析

HDFS的优势

高容错
1:保存多个副本,且提供容错机制。
2:副本丢失或宕机自动恢复。默认存 3 份。
运行在廉价的机器上(商用机)
1:通过副本提高可靠性
2:通过副本提高可靠性
适合批处理
1:移动计算而非数据
2:数据位置暴露给计算框架。 NameNode 上有位置
适合大数据的处理

1:.TB,甚至PB级数据

2:百万规模以上的文件数量

3:10K+节点规模

流式数据访问
一次写入,多次读取,高吞吐量,所以可以同时处理大量数据

缺点

不擅长低延迟数据访问
比如毫秒级
不擅长小文件的分区
1:占用 NameNode 大量内存
2:磁盘寻道时间超过读取时间
不擅长并发写入,文件随机修改
1:一个文件只能有一个写入者
2:仅支持 append, 也就是添加(有组件实现删等)

基本概念
1:HDFS是用Java语言实现的、分布式的、可扩展的文件系统。
2:HDFS是Hadoop的三大核心(HDFS、MapReduce、YARN)和四大模块(Hadoop Common、Hadoop HDFS、Hadoop MapReduce、Hadoop YARN)之一。
3:HDFS主要应用于海量数据的存储。
4:HDFS的基本存储单位:块,块是最小的数据读写单位,默认存储块大小为128M。块的大小可以在配置文件hdfs-site.xml中修改。块的默认单位是Byte,每个块都有自己的全局唯一ID。HDFS就是以块为单位在集权服务器上分配存储的。
5:块的好处就是:一个文件的大小可以大于集群中任一磁盘容量;块适合于数据备份,极大的提高了集群的容错能力和可用性

分布式文件特点
1:高可靠:按位存储,就近原则分配数据,会把数据分配到离它最近的数据节点(DateNode)上。
2:高扩展:集群节点可以根据业务需求随时扩展和缩减。
3:高效性:可以在各个集群节点之间动态移动数据,保证集群各节点之间的动态平衡。
4:高容错:自动保存多个副本(默认3个,可自行修改),并且能够将失败的任务重新分配,解决故障,成本低。
5:不适合存储小文件
6:不适合低延迟的数据访问(多用于离线数据分析)

HDFS设计目标
1:故障检测和自动快速恢复是HDFS的核心架构目标。因为HDFS可能有成百上千的服务器组成,每一个组件都有可能出现故障。
2:相较于数据访问的反应时间,更注重数据访问的高吞吐量。HDFS被设计成用于批处理,而不是用户交互式的。
3:典型的HDFS文件大小是GB到TB的级别。所以,HDFS被调整成支持大文件(Large Data Sets) 。它应该提供很高的聚合数据带宽,一个集群中支持数百个节点,一个集群中还应该支持千万级别的文件。

HDFS组成架构

HDFS采用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。
1:Namenode(NN):就是一个Master,是一个管理者
(1)管理HDFS的名称空间;
(2)配置副本策略;
(3)管理数据块(Block)映射信息;
(4)处理客户端读写请求。
2:DataNode:就是Slave。NameNode 下达命令,DataNode执行实际的操作。
(1)存储实际的数据块;
(2) 执行数据块的读/写操作
3:Client:就是客户端
(1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行上传;
(2)与NameNode交互,获取文件的位置信息;
(3)与DataNode交互,读取或者写入数据;
(4)Client提供一些命令来管理HDFS,比如NameNode格式化;
(5)Client可以通过一些命令来访问HDFS,比如对HDFS增删查改操作;
4:Secondary NameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。
(1)辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode ;
(2)在紧急情况下,可辅助恢复NameNode。
                 
HDFS 文件块大小
HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数 ( dfs.blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M,1.x版本中是64M
 
HDFS写入流程

宏观写入流程

微观写入数据流程


(1)客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件,NameNode 检查目标文件是否已存在,父目录是否存在。
(2)NameNode 返回是否可以上传。
(3)客户端请求第一个 Block 上传到哪几个 DataNode 服务器上。
(4)NameNode 返回 3 个 DataNode 节点,分别为 dn1、dn2、dn3。
(5)客户端通过 FSDataOutputStream 模块请求 dn1 上传数据,dn1 收到请求会继续调用 dn2,然后 dn2 调用 dn3,将这个通信管道建立完成。
(6)dn1、dn2、dn3 逐级应答客户端。
(7)客户端开始往 dn1 上传第一个 Block(先从磁盘读取数据放到一个本地内存缓存), 以 Packet 为单位,dn1 收到一个 Packet 就会传给 dn2,dn2 传给 dn3;dn1 每传一个 packet 会放入一个应答队列等待应答。 (8)当一个 Block 传输完成之后,客户端再次请求 NameNode 上传第二个 Block 的服务 器。(重复执行 3-7 步)。

HDFS 读数据流程

1.客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址,并返回地址给客户端

2.挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据

3.DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以packet为单位校验)

4.客户端以packet为单位接收,先在本地缓存,然后写入目标文件

5.关闭资源
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hadoop分布式文件系统HDFS)是Hadoop核心组件之一,用于解决大数据存储的问题。它是一个横跨多台计算机的存储系统,采用了master/slave(主从)架构。一个HDFS集群由一个Namenode和一定数量的Datanode组成。Namenode是HDFS集群的主节点,负责协调和管理文件系统的元数据,而Datanode是从节点,负责存储实际的数据块。\[1\]\[2\] HDFS的设计目标之一是能够在面对硬件错误时继续运行而不让用户感知到明显的断。因此,HDFS使用商用硬件,并且具备错误检测和快速、自动恢复的能力。由于HDFS可能由成百上千个服务器组成,任何一个组件都可能发生故障,因此这种容错能力对于保证系统的可靠性至关重要。\[3\] #### 引用[.reference_title] - *1* *2* [Hadoop分布式文件系统(HDFS)](https://blog.csdn.net/Melody_12/article/details/104866522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Hadoop分布式文件系统HDFS)](https://blog.csdn.net/XueFengPlay/article/details/78869007)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值