当前位置: 首页 > article >正文

大数据学习(60)-HDFS文件结构

&&大数据学习&&
🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞

一、体系结构


        HDFS是一个标准的主从(Master/Slave)体系结构的分布式系统;HDFS集群包含一个或多个NameNode(NameNode HA会有多个NameNode) 和 多个DataNode(根据节点情况规划),用户可以通过HDFS客户端同NameNode 和 DataNode进行交互以访问文件系统。
        HDFS公开文件系统名称空间,并允许将用户数据存储在文件中。在内部,一个文件被分成一个或多个块,这些块存储在一组datanode中。NameNode执行文件系统名称空间操作,如打开、关闭和重命名文件和目录。它还确定块到datanode的映射。datanode负责处理来自文件系统客户机的读和写请求。datanode还根据来自NameNode的指令执行块创建、删除和复制(体系结构如下图所示)。

二、相关概念

        HDFS文件系统维护着一个命名空间,它是一个树状结构,包含文件和目录。这个命名空间以根目录“/”开始,用户可以创建、删除文件和目录,以及修改它们的权限。
1.NameNode
负责客户端请求的响应
元数据的管理(查询,修改)
namenode是HDFS集群主节点,负责维护整个hdfs文件系统的目录树,以及每一个路径(文件)所对应的block块信息(block的id,及所在的datanode服务器)

2.JournalNode
NameNode之间共享数据(主要体现在 NameNode配置 HA)

3.DataNode
存储管理用户的文件块数据
定期向namenode汇报自身所持有的block信息(通过心跳信息上报)

4.Data Blocks
HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M

5.Data Replication
每一个block都可以在多个datanode上存储多个副本(副本数量也可以通过参数设置dfs.replication,默认是3

6.HDFS通信协议
HDFS作为分布式文件系统,涉及到数据节点,名称节点和客户端三者之间的配合,相互调用才能实现。为了降低节点间代码的耦合性,提高单个节点的内聚性,HDFS将这些节点间的调用抽象成不同的接口。
Hadoop RPC接口:HDFS中基于Hadoop RPC框架实现的接口。

三、文件和目录的表示

  • 文件:在HDFS中,文件被分割成多个数据块(Block),每个数据块默认大小为128MB(或配置为其他大小,如64MB、256MB等),这些数据块被分布存储在HDFS集群中的不同DataNode上。
  • 目录:目录是文件系统的组织单元,用于对文件进行分类和管理。目录本身不存储数据,但包含文件和子目录的元数据。

四、元数据的管理

  • NameNode:NameNode是HDFS集群的主节点,负责管理文件系统的命名空间以及客户端对文件的访问。它存储着文件系统的元数据,包括文件名、目录结构、数据块的位置信息等。
  • DataNode:DataNode是HDFS集群的工作节点,负责存储数据块。每个DataNode会定期向NameNode报告它所存储的数据块列表,以便NameNode能够跟踪整个文件系统的数据分布。

五、数据块的分布和复制

  • 数据块分布:HDFS将数据块分布存储在多个DataNode上,以实现数据的冗余和可靠性。这有助于在单个DataNode出现故障时,仍然能够访问数据。
  • 数据块复制:HDFS默认将数据块复制3份,存储在不同的DataNode上。这种复制策略有助于防止数据丢失,提高数据的可用性。用户可以根据需要调整复制因子,以适应不同的存储需求和成本考虑。

六、访问控制

        HDFS支持基于文件和目录的访问控制,通过权限设置来限制用户对文件和目录的访问。权限可以分为读(Read)、写(Write)和执行(Execute)三种,用户可以根据需要为不同的文件和目录设置不同的权限。

七、文件操作

  • 创建文件:客户端通过NameNode获取文件元信息,然后在DataNode上创建数据块并写入数据。
  • 读取文件:客户端通过NameNode获取文件的数据块位置信息,然后从相应的DataNode上读取数据块并组装成完整的文件。
  • 删除文件:客户端通过NameNode删除文件的元数据,并从DataNode上删除相应的数据块。

八、特殊目录

  • /tmp:临时目录,用于存储临时文件。HDFS会定期清理这个目录下的文件,以避免占用过多的存储空间。
  • /user:用户目录,用于存储用户创建的文件和目录。每个用户都有自己的用户目录,路径为/user/用户名

九、HDFS 文件读写流程

1. 写入文件
  1. 客户端向 NameNode 请求创建文件。

  2. NameNode 验证权限后,分配数据块和 DataNode 列表。

  3. 客户端将数据写入第一个 DataNode,该节点依次复制到其他节点。

  4. 写入完成后,NameNode 更新元数据。

2. 读取文件
  1. 客户端向 NameNode 请求文件块的位置。

  2. NameNode 返回包含块副本的 DataNode 列表。

  3. 客户端直接从最近的 DataNode 读取数据。

十、HDFS 路径示例


1. 典型目录结构

/                 # 根目录
├── tmp           # 临时目录
├── user          # 用户目录
│   └── hive      # Hive 数据仓库
│       └── warehouse
└── data          # 业务数据目录
    └── logs      # 日志文件

2. 分区目录(常见于大数据场景)
按时间或业务维度分区,提升查询效率:

/user/hive/warehouse/sales
├── pt=2023-10-01
├── pt=2023-10-02
└── pt=2023-10-03

http://www.kler.cn/a/581943.html

相关文章:

  • nginx反向代理应用
  • 【Academy】JWT 分析 ------ JWT
  • HTTP发送POST请求的两种方式
  • 全局引用scss文件定义的变量
  • JavaScript与UniApp、Vue、React的关系
  • 【RabbitMQ】事务
  • 车间图纸安全传输需要注意什么?
  • PostgreSQL - Windows PostgreSQL 卸载
  • 物联网IoT系列之MQTT协议基础知识
  • 入门到入土,Java学习 day16(算法1)
  • Spring 源码硬核解析系列专题(十三):Spring Cache 的缓存抽象源码解析
  • 2025-03-11 学习记录--C/C++-C-返回字符串t在字符串s中首次或最后一次出现的位置、返回字符串s中第一个匹配或不匹配字符串t中任意字符的位置
  • 使用 Docker 和 Nginx 实现反向代理:统一端口路由多服务的完整指南
  • Data Science Agent in Colab完全指南:AI驱动的智能数据分析助手
  • 网络安全linux命令
  • 记一次Spring Boot应用中数据库连接阻塞问题排查过程
  • AI Agent开发框架分析:前端视角
  • GStreamer —— 2.18、Windows下Qt加载GStreamer库后运行 - “播放教程 6:音频可视化“(附:完整源码)
  • 使用格式工厂提取视频中的音频
  • 智慧停车小程序:实时车位查询、导航与费用结算一体化