大数据学习之HDFS

本文详细介绍了HDFS的产生背景、组成架构,包括NameNode、DataNode和SecondaryNameNode的角色。阐述了文件上传下载过程,以及HDFS的优缺点,特别关注了其在大数据处理中的优势和延迟问题。同时,列出了HDFS的常用Shell命令行工具。
摘要由CSDN通过智能技术生成


一、HDFS产生背景  

        在互联网时代,数据不断增加,随着数据量的增加,在一个操作系统存不下所有的数据,那么久分配到更多的操作系统管理的磁盘中,但将数据分散的存储在不同的操作系统中,不便于管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。

        HDFS(Hadoop Distributed File System)是一种分布式文件系统,用于存储和管理大规模数据集的分布式存储解决方案,通过目录树来定位文件。


二、HDFS组成架构

HDFS主要由NameNode、DataNode、SecondaryNameNode、Client组成。NameNode,DataNode之间具有主从关系。

1)NameNode(nn):相当于Master,它是一个管理者

—> 元数据管理:NameNode负责管理HDFS的元数据。

此处的元数据如果小伙伴们不了解,可以看我的另外一篇文章

https://blog.csdn.net/weixin_73844647/article/details/135885406?spm=1001.2014.3001.5501

—> 块映射:NameNode维护一个块到数据节点的映射表,它记录了每个数据块的副本存储在哪些数据节点上。

—> 客户端请求处理:NameNode处理客户端的文件系统请求,例如创建、删除、重命名文件或目录,以及读取文件的元数据信息。

2)DataNode(dn):相当于Slave,NameNode下达命令,DataNode执行实际操作。

—> 数据块存储:DataNode负责存储实际的数据块。他们根据NameNode的指示将数据块写入本地磁盘,并在需要时将数据块传送给客户端。

—> 块报告:DataNode周期性地向NameNode发送报告,告知NameNode它们存储了哪些块,并报告数据块的将抗状态。

—> 块复制:如果某个数据块的副本数下降到预定的阈值以下,DataNode会复制丢失的块副本,以维护数据的可靠性。

3)SecondaryNameNode(2nn):辅助恢复NameNode

—> 元数据备份:SecondaryNameNode的主要作用是定期备份NameNode元数据。需要注意的是它并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。它不会处理实际的文件数据,而只是备份元数据。

—> 日志合并: Secondary NameNode也负责合并HDFS事务日志(编辑日志),以帮助减小NameNode的编辑日志大小,防止过大的编辑日志导致启动时间过长。

4)Client:客户端

—> 文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行上传;

—> 与NameNode交互,获取文件的位置信息;

—> 与DataNode交互,读取或者写入数据;

—> Client提供一些命令来管理HDFS,比如NameNode格式化;

—> Client可以通过一些命令来访问HDFS,比如对HDFS增删查改操作


三、上传下载文件过程

1.前置信息

文件在HDFS中会被分成默认为128M的块(block)存储,便于以后的分区或者分桶来达到提升查询效率的目的

2.客户端读取hdfs文件内容的流程

客户端请求
1)nameNode验证请求,如客户端权限,元数据中文件是否存在
 从nameNode取到目录树,找到保存数据节点的地址返回,选择最近的节点
2)从dataNode读数据并在读完后到下一个dataNode,最后合并
3)读取文件,执行操作
4)关闭连接

3.客户端向hdfs写内容的流程


客户端请求
1)nameNode接受请求,验证权限等,查询目录树中文件的位置
2)nameNode确定写入内容,分配dataNode存储
3)客户端连接dataNode
4)客户端将数据切块,发送数据块,dataNode将数据写入并确认是否写入
5)复制副本一般存3份
6)返回节点位置,写入情况到nameNode作为元数据


四、HDFS的优缺点

在了解了文件上传下载的过程后,我们来看看其优缺点,相信大家能够更容易理解

优点

1)高容错性:数据自动保存多个副本,它能够通过增加副本的形式,提高容错性。当某一个副本丢失后,它可以根据其他节点上的副本数据自动恢复。也就是上面的复制副本

备份机制如下

一个在本地机架节点
一个在同一个机架不同节点
一个在不同机架的节点

2)适合处理大数据

  • 数据规模:能够处理数据规模达到GB、TB甚至PB级别的数据;
  • 文件规模:能够处理百万规模以上的文件数量。

3)高可扩展性: HDFS可以轻松扩展以处理大规模数据,只需添加更多的节点即可。这种可扩展性使其适用于应对不断增长的数据量。NameNode 和 DataNode 的主从关系

4)数据本地性: HDFS会在数据节点上存储数据块,这使得计算可以在数据附近进行,减少了网络传输的开销,提高了性能

缺点

1)延迟问题: HDFS通常用于批量数据处理,对于需要低延迟的实时数据访问场景不太适用。读取数据的响应时间可能会较长。做不到向Mysql那样快速相应数据。

2)无法高效的对大量小文件进行存储

对于每一个存储在HDFS文件系统中的文件,HDFS都会开销一部分内存来存储它的一些元数据(包括目录和块信息等),存储大量小文件的话,会占用NameNode大量的内存来存储文件目录和块信息。这样是不可取的,因为NameNode的内存总是有限的,太多的小文件会徒增NameNode的负担,甚至会使其崩溃。同时一个块的大小为128M,小文件的内存使用率较低。

3)不支持原子性写入操作:

        由上面的上传下载过程可知,文件的修改需要将一整个文件加载到内存中,方可修改,然而这在大数据情况下是不可取的,因此HDFS不支持原子性写入操作。

而且如果多个客户端同时尝试写入同一文件,可能会导致数据不一致性。因此HDFS规定:

  • 一个文件只能同一时间只能有一个写,不允许多个线程同时写;
  • 仅支持数据追加(append),不支持文件的随机修改。

五、HDFS CLI (shell命令行)

• 查看可用命令
  hdfs dfs
• 创建存放数据文件的目录
hdfs dfs -mkdir /hdfs/shell
hdfs dfs -ls /hdfs/shell
• 将通讯数据上传到HDFS并查看
hdfs dfs -put /home/hadoop/data/mobile.txt /hdfs/shell
hdfs dfs -text /hdfs/shell/mobile.txt
• 下载文件到本地
hdfs dfs -get /hdfs/shell/mobile.txt /home/hadoop
• 统计目录下文件大小
hdfs dfs -du /hdfs/shell
删除移动数据文件和目录
hdfs dfs -rm /hdfs/shell/mobile.txt
hdfs dfs -rmr /hdfs(rmr为递归删除慎用)
这就是我对hadoop核心组件HDFS的一些理解,如有错误请大家斧正。
  • 41
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值