HDFS详解

article/2025/8/14 21:06:22

一、HDFS 概述

  1. 定位与特点
  • 分布式文件系统:HDFS(Hadoop Distributed File System)是 Hadoop 生态的核心组件,专为海量数据存储和批处理设计。

  • 核心设计原则:

    • 高容错性:数据自动多副本冗余,支持硬件故障自动恢复。

    • 高吞吐量:顺序读写优化,适合离线数据分析(如 MapReduce)。

    • 可扩展性:支持 PB 级数据存储,通过横向扩展节点实现容量增长。

  • 适用场景:日志存储、数据仓库、ETL 处理、机器学习训练数据存储等。


二、HDFS 核心架构

1. 核心组件

  • NameNode(NN):

    • 元数据管理:维护文件系统的目录树、文件块映射(Block Map)和副本位置。

    • 单点问题:早期版本仅支持单 NameNode(通过 Secondary NameNode 辅助合并元数据),Hadoop 2.x 后支持 HA(High Availability) 双 NameNode 架构。

  • DataNode(DN):

    • 数据存储:实际存储数据块(Block,默认 128MB/256MB)。

    • 心跳机制:定期向 NameNode 汇报存活状态和块信息。

  • Secondary NameNode(SNN):

    • 辅助合并 FsImage 和 EditLog:定期合并元数据快照,减轻 NameNode 负担(非 HA 模式)。

2. 文件写入流程

  1. 客户端请求:向 NameNode 申请写入文件。
  2. 元数据分配:NameNode 分配 DataNode 列表(默认 3 副本)。
  3. 流水线写入:客户端将数据块写入第一个 DataNode,DataNode 依次转发到其他节点。
  4. 确认提交:所有 DataNode 确认写入后,NameNode 更新元数据。
客户端 -> NameNode: 创建文件请求  
NameNode -> 客户端: 分配 DataNode 列表 [DN1, DN2, DN3]  
客户端 -> DN1: 发送数据块  
DN1 -> DN2: 转发数据块  
DN2 -> DN3: 转发数据块  
DN3 -> DN2: 确认写入  
DN2 -> DN1: 确认写入  
DN1 -> 客户端: 确认写入  
客户端 -> NameNode: 提交文件元数据  

3. 文件读取流程

  1. 客户端请求:向 NameNode 获取文件块位置。
  2. 数据块定位:NameNode 返回最近的 DataNode 列表。
  3. 并行读取:客户端直接从 DataNode 读取数据块。
客户端 -> NameNode: 获取文件块位置  
NameNode -> 客户端: 返回 DataNode 列表 [DN2, DN1, DN3]  
客户端 -> DN2: 读取数据块(就近原则)  

三、HDFS 核心机制

1. 数据副本策略

  • 默认副本数:3(可配置)。

  • 副本放置策略:

    • 第一副本:优先写入客户端所在节点(若为集群内节点)。

    • 第二副本:同一机架(Rack)的另一个节点。

    • 第三副本:不同机架的节点。

2. 容错机制

  • DataNode 故障:NameNode 检测到心跳超时后,触发副本复制到其他节点。

  • NameNode HA:

    • Active-Standby 模式:通过 ZooKeeper 实现故障切换(Failover)。

    • 共享存储(JournalNode):确保 Standby NameNode 实时同步 EditLog。

3. 数据一致性

  • 写一致性:HDFS 采用 “Write Once, Read Many”(WORM) 模型,文件一旦写入不可修改(仅支持追加)。

  • 追加写入:通过 hdfs append 命令或 API 实现(需开启支持)。


四、HDFS 操作与管理

1. 命令行工具

  • 基本操作:

    # 查看文件列表
    hdfs dfs -ls /path# 上传文件
    hdfs dfs -put localfile /hdfs/path# 下载文件
    hdfs dfs -get /hdfs/path/file localdir# 删除文件
    hdfs dfs -rm /hdfs/path/file
    
  • 文件系统检查:

    # 查看文件块分布
    hdfs fsck /path/file -files -blocks -locations
    

2. 配置文件

  • 核心配置项:

    • hdfs-site.xml:定义副本数、块大小、HA 配置等。

    • core-site.xml:定义 NameNode 地址(fs.defaultFS)。

<!-- hdfs-site.xml -->
<property><name>dfs.replication</name><value>3</value>
</property>
<property><name>dfs.blocksize</name><value>134217728</value> <!-- 128MB -->
</property>

3. 高可用(HA)配置

  • JournalNode 配置:

    <property><name>dfs.journalnode.edits.dir</name><value>/path/to/journal</value>
    </property>
    
  • 故障切换控制器:

    <property><name>dfs.ha.automatic-failover.enabled</name><value>true</value>
    </property>
    

五、HDFS 最佳实践

1. 性能优化

  • 避免小文件:合并小文件(使用 HARCombineFileInputFormat)。

  • 调整块大小:根据数据访问模式调整块大小(如 256MB 用于大文件)。

  • 数据本地性:在计算框架(如 Spark)中优先调度任务到数据所在节点。

2. 监控与运维

  • 监控指标:

    • NameNode:堆内存使用率、RPC 延迟、文件系统容量。

    • DataNode:磁盘使用率、网络吞吐量、块副本数。

  • 日志分析:通过 NameNode Audit Log 跟踪文件操作记录。

3. 安全机制

  • Kerberos 认证:启用 Kerberos 防止未授权访问。

  • HDFS 权限:类似 Linux 文件系统的权限模型(用户/组/其他)。

    hdfs dfs -chmod 750 /path
    hdfs dfs -chown user:group /path
    

六、常见问题与解决方案

  1. NameNode 堆内存溢出:

    • 增大 HADOOP_HEAPSIZE,启用 GC 优化参数。

    • 启用 NameNode 元数据分片(Federation)。

  2. DataNode 磁盘不均:

    • 启用 Balancer 工具均衡数据分布:

      hdfs balancer -threshold 10  # 磁盘使用率差异阈值10%
      
  3. 文件无法删除:

    • 检查权限,或启用强制删除:

      hdfs dfs -rm -r -skipTrash /path  # 绕过回收站
      
  4. 副本数不足:

    • 手动触发副本复制:

      hdfs dfs -setrep -w 5 /path/file  # 设置副本数为5并等待完成
      

七、HDFS 与其他存储系统对比

特性HDFSAmazon S3HBase
数据模型文件系统(目录/文件)对象存储(Key-Value)列式数据库(NoSQL)
延迟高吞吐,高延迟中等延迟低延迟(随机读写)
适用场景批处理、离线分析云原生存储、归档实时查询、随机访问

八、总结

HDFS 是构建大数据存储和计算平台的基石,其核心价值在于:

  • 高可靠存储:通过多副本和自动恢复机制保障数据安全。

  • 无缝集成:与 Hadoop 生态工具(MapReduce、Hive、Spark)深度协同。

  • 横向扩展:支持从 TB 到 PB 级数据存储。

关键实践建议:

  • 生产环境必须启用 HA 和 Kerberos。

  • 避免存储小文件,定期运行 Balancer 优化数据分布。

  • 结合计算框架(如 Spark)利用数据本地性提升性能。


在这里插入图片描述


http://www.hkcw.cn/article/vgBBwowtfk.shtml

相关文章

【数据结构】String字符串的存储

目录 一、存储结构 1.字符串常量池 2.字符串哈希表 2.1结构 2.2基础存储单位 2.2.1键对象 2.2.2值对象 二、存储过程 1.搜索 2.创建 三、存储位置 四、存储操作 1.new新建 2.intern入池 这是String类的详解&#xff1a;String类变量 一、存储结构 1.字符串常量池…

数据结构大作业——家谱管理系统(超详细!完整代码!)

目录 设计思路&#xff1a; 一、项目背景 二、功能分析 查询功能流程图&#xff1a; 管理功能流程图&#xff1a; 三、设计 四、实现 代码实现&#xff1a; 头文件 结构体 函数声明及定义 创建家谱树头结点 绘制家谱树&#xff08;打印&#xff09; 建立右兄弟…

北京将有7级大风小冰雹 雷电蓝色预警发布

6月1日17时50分,北京发布雷电蓝色预警,预计当天20时至次日2时,自西向东将有雷阵雨天气,局地短时雨强较大,并伴有7级左右短时大风和小冰雹,请注意防范。明天上午至中午前后依旧会出现分散性雷阵雨,雨量总体不大。午后至前半夜北风增强,阵风明显,外出时请做好防风措施,…

专家:印太战略实质是霸权工具 不会得逞

针对美国防长赫格塞思在香格里拉对话会上涉及中国的部分表态,有中国学者指出,美国所谓的“印太战略”实质上是霸权工具,不会得逞。在对话会上,赫格塞思再次提到所谓的“印太战略”,并呼吁亚太地区同盟国和合作伙伴国与美国一起构筑更现实的战略关系。国防大学教授孟祥青表…

SCNN(Spatial CNN) 模型学习记录

目录 1.模型架构 2.核心模块SCNN_*分析 SCNN&#xff08;Spatial As Deep: Spatial CNN for Traffic Lane Detection&#xff09;是一种专为交通车道线检测任务设计的深度神经网络架构&#xff0c;由中国科学院计算技术研究所提出&#xff0c;旨在在语义分割框架中增强空间信…

Lerobot框架使用(含本地数据训练)

本文包含从安装环境到完整使用Lerobot框架进行算法复现全流程。 A Install LeRobot 安装miniconda管理python环境 Linux mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh bash ~/minicon…

小红书 web x-s x-t X-Mns 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 cp execjs.compile(open(v…

国产化中间件基本使用_东方通(TongWeb7.0.E.6_P2)

tongweb开发操作文档 1、前期准备 进入官网申请使用,官网地址:https://www.tongtech.com 若提供的安装程序的授权文件已过期,请去官方网站重新申请。 2、安装部署 2.1、下载安装Tongweb 进入官网申请试用,官方会提供响应的嵌入式安装包及试用授权证书(3个月) 申请…

010302-oss_反向代理_负载均衡-web扩展2-基础入门-网络安全

文章目录 1 OSS1.1 什么是 OSS 存储&#xff1f;1.2 OSS 核心功能1.3 OSS 的优势1.4 典型使用场景1.5 如何接入 OSS&#xff1f;1.6 注意事项1.7 cloudreve实战演示1.7.1 配置cloudreve连接阿里云oss1.7.2 常见错误1.7.3 安全测试影响 2 反向代理2.1 正向代理和反向代理2.2 演示…

FREERTOS+LWIP+IAP实现TCP、HTTP、网页访问并固件升级、更新配置 (三)lwip实现httpd服务并在web访问

前言 在前两篇文章中配置freeRTOS和&#xff0c;并实现了TCP、UDP的通信协议&#xff0c;现在终于轮到重头戏lwip的httpd服务&#xff0c;LWIP官方例程中是有很多自带的网页的&#xff0c;但是远远不够满足实际项目的使用需求&#xff0c;因此我也是踩了很多坑&#xff0c;从前…

lighthouse(灯塔)前端性能测试工具

前端性能测试工具之lighthouse灯塔 介绍下载链接使用方法前端性能指标解读 介绍 Lighthouse 是一个开源的自动化工具&#xff0c;用来测试前端页面性能&#xff0c;反馈页面问题以提升页面体验。可以联合谷歌浏览器&#xff0c;作为插件导入&#xff0c;开启后可测试页面性能 …

Ai智能体四:互动式 AI 聊天助手:前端实现

在现代 web 应用中,集成智能对话功能已经成为提升用户体验的重要手段之一。本文将介绍如何通过 Vue 3 和 Element Plus 构建一个高效的 AI 聊天助手界面,并详细讲解其实现原理和功能。 1. 整体架构 该聊天界面分为 左侧边栏 和 右侧内容区域,实现了清晰的布局结构,左侧边…

Spring Boot 3.x 引入springdoc-openapi (内置Swagger UI、webmvc-api)

接触的原因 因开发自己的项目时&#xff0c;写接口文档很繁琐&#xff0c;查到后端都在用swagger等接口工具来记录接口文档&#xff0c;于是学习了一下&#xff0c;本文记录个人配置过程&#xff0c;有问题欢迎指正交流&#x1f601; Swagger&#xff1a; Swagger是一种Rest AP…

OpenWebUI配置异常的外部模型导致页面无法打开

一、使用Ollama关闭OpenAI OpenWebUI自带OpenAI的API设置&#xff0c;且默认是打开的&#xff0c;默认情况下&#xff0c;启动后&#xff0c;会不断的去连https://api.openai.com/v1&#xff0c;但是无法连上&#xff0c;会报错&#xff0c;但是不会影响页面&#xff0c;能正常…

Postman(Apifox)调用WebServicer接口

postman调用WebServicer接口 前言 Postman使用方法Apifox使用方法参数与配置请求代码(当然一般开发会给一个样例)步骤 前言 之前都是使用SoapUI测试WebServicer接口,由于工作所需,需要使用Postman测试工具 Postman使用方法 可以直接在请求里写全部的wsdl地址 ,参数会自动带进…

DeepSeek本地化部署实践:Xinference框架+OpenWebUI实现DeepSeek-r1推理跑在国产GPU之上

近日&#xff0c;我部门从供应商那儿借来一台高算力服务器&#xff0c;用来尝试本地化部署DeepSeek。该服务器型号为ASUS ESC8000A-E11&#xff0c;具体配置如下&#xff1a; CPU&#xff1a;AMD EPYC 7702&#xff08;64核&#xff09;* 2 GPU&#xff1a;&#xff08;天数智…

Android WebRTC集成及JNI性能优化实战指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;WebRTC是一个开源项目&#xff0c;旨在实现浏览器间无需插件的实时通信&#xff0c;包括音频、视频通话及数据共享。在Android平台上&#xff0c;其实施涉及使用JNI接口进行Java与C/C代码的交互。本压缩包内容预…

【前端】超链接标签(a标签)之href属性、target属性

文章目录 一、a标签1、href属性&#xff08;1&#xff09;跳转至网络链接页面&#xff08;2&#xff09;跳转至其它工程页面&#xff08;3&#xff09;跳转至本界面 2、target属性 二、感谢观看&#xff01; 一、a标签 a标签即超链接标签&#xff0c;根据名字我们就能知道它是…

【前端开发】一文带你快速入门JavaScript(下)Web 前端必备程序语言 | 条件语句与循环结构

&#x1f4af; 欢迎光临清流君的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落 &#x1f4af; &#x1f525; 个人主页:【清流君】&#x1f525; &#x1f4da; 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 &#x1f4da; &#x1f31f;始终保持好奇心&…

教你在.Net8.0的WinForm中使用WebView2,实现C#和JavaScript的实时双向互操作

1. 前言 随着 Web 技术的发展&#xff0c;使用网页内容&#xff08;HTML、JavaScript、CSS 等&#xff09;作为桌面应用程序的一部分变得越来越常见。在 C# WinForm 中&#xff0c;Microsoft 提供的 WebView2 控件让我们可以轻松地嵌入 Chromium 浏览器&#xff0c;并实现 C# …