HDFS基础知识

什么是hdfs

1 .Hadoop 分布式文件系统。是 Hadoop 核心组件之一,作为最底层的分布式存储服务而存在。分布式文件系 统解决的问题就是大数据存储。

为什么需要HDFS?

HDFS(Hadoop Distributed File System) 是一个分布式文件系统,被设计用来存储大规模数据集,并能够提供 高可靠性、高可用性和高性能的数据访问。

HDFS 是 Hadoop 生态系统的重要组成部分之一。

HDFS的使用场景:适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变。

hdfs优化

配置 Hadoop 参数block size、replication factor、io timeout 等参数来优化 HDFS 的性能。

使用合适的数据结构

使用高速网络连接

减少网络负载

采用多个副本存储

采用随机存储

采用按量备份

定期清理旧数据

使用压缩算法

使用块设备

使用多线程

使用锁机制

使用并发读写

hdfs优缺点

优点(1) 高容错性(2) 适合批处理(3) 适合大数据处理(4) 流式数据访问(5) 可构建在廉价机器上

缺点(1) 不适合低延时数据访问;(2) 无法高效的对大量小文件进行存储

工作原理

数据块分配:HDFS 将数据块分配给不同的节点,每个节点存储一定数量的数据块。节点之间的数据块是随机分 配的,这样可以提高数据访问的并行度。

数据块复制:为了确保数据的可靠性和高可用性,HDFS 将数据块复制到多个节点上。通常情况下,每个节点都 会存储数据块的多个副本,例如三个副本。

数据访问:用户可以通过 Hadoop 分布式文件系统 (HDFS) 访问数据。HDFS 支持高效的读取和写入数据,并 且可以并行处理数据访问请求。

数据备份和恢复:HDFS 支持数据备份和恢复功能,可以定期将数据块备份到其他节点上,以便在节点故障时快 速恢复数据。

数据一致性保证:HDFS 通过多个节点之间数据块的随机分配和数据块副本的存储来保证数据一致性。通常情况 下,HDFS 采用多副本存储的方式来保证数据一致性。

一、写数据流程

1.首先客户端HDFS Client创建一个Distributed FileSystem 向NameNode请求上传文件ss.avi

2.然后NameNode检查目录树是否可以创建文件(检查权限——是否允许上传,检查目录结构——是否存在)。当都通过的时候响应客户端,反馈可以上传文件

3.客户端接收到可以上传文件的允许后,向NameNode请求上传第一个Block,上传到哪几个DataNode

4.NameNode进行计算,选择副本存储节点,第一个选择的是本地节点,第二个选择的是其他机架的一个节点,第三个是其他机架的另一个节点(默认三个副本存储节点)。并把这三个节点返回给客户端(dn1、dn2、dn3)

5.客户端拿到这三个节点后,创建一个流,向离的最近的一个节点(dn1)进行请求建立Block传输通道,而最近的节点(dn1)会向另外的节点(dn2)进行请求建立通道,另外的节点(dn2)会向第三个节点请求传输通道(dn3)

6.三个节点接收到请求建立通道后,逐一进行应答客户端

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.关闭资源

深入剖析为什么HDFS文件块(block)大小设定为128M

我们在HDFS中存储数据是以块(block)的形式存放在DataNode中的,块(block)的大小可以通过设置dfs.blocksize来实现;

在Hadoop2.x的版本中,文件块的默认大小是128M,老版本中默认是64M;

目录

一、为什么HDFS中块(block)不能设置太大,也不能设置太小?

二、 HDFS中块(block)的大小为什么设置为128M?

寻址时间:HDFS中找到目标文件块(block)所需要的时间。

原理:

文件块越大,寻址时间越短,但磁盘传输时间越长;

文件块越小,寻址时间越长,但磁盘传输时间越短。

一、为什么HDFS中块(block)不能设置太大,也不能设置太小?

1. 如果块设置过大,

一方面,从磁盘传输数据的时间会明显大于寻址时间,导致程序在处理这块数据时,变得非常慢;

另一方面,mapreduce中的map任务通常一次只处理一个块中的数据,如果块过大运行速度也会很慢。

2. 如果块设置过小,

一方面存放大量小文件会占用NameNode中大量内存来存储元数据,而NameNode的内存是有限的,不可取;另一方面文件块过小,寻址时间增大,导致程序一直在找block的开始位置。

因而,块适当设置大一些,减少寻址时间,那么传输一个由多个块组成的文件的时间主要取决于磁盘的传输速率。

二、 HDFS中块(block)的大小为什么设置为128M?

1. HDFS中平均寻址时间大概为10ms;

2. 经过前人的大量测试发现,寻址时间为传输时间的1%时,为最佳状态;

所以最佳传输时间为10ms/0.01=1000ms=1s

3. 目前磁盘的传输速率普遍为100MB/s;

计算出最佳block大小:100MB/s x 1s = 100MB

所以我们设定block大小为128MB。

ps:实际在工业生产中,磁盘传输速率为200MB/s时,一般设定block大小为256MB

磁盘传输速率为400MB/s时,一般设定block大小为512MB

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值