【Hadoop】详解HDFS

news2025/3/13 2:52:50

Hadoop 分布式文件系统(HDFS)被设计成适合运行在通用硬件上的分布式文件系统,它是一个高度容错性的系统,适合部署在廉价的机器上,能够提供高吞吐量的数据访问,非常适合大规模数据集上的应用。为了做到可靠性,HDFS创建了多份数据块的副本,并将它们放置在服务器群的计算节点中,MapReduce 可以在它们所在的节点上处理这些数据。

1. HDFS 的设计目标

  • 存储大规模数据:HDFS 可以存储并管理 PB 级甚至 EB 级的数据。
  • 高容错性:数据自动保存多个副本,副本丢失自动恢复
  • 高吞吐量:适合流式数据访问,支持高并发读写,一次写入,可多次读取,确保数据的一致性。
  • 低成本:可以在普通硬件上运行,降低存储成本。

2. HDFS 的设计思想和体系架构

HDFS采用主从架构。一个HDFS集群是由一个NameNode和一定数目的DataNodes 组成。其中 NameNode 是一个中心服务器,负责文件系统的名字空间(namespace)管理以及客户端对文件的访问。集群中的DataNode一般是一个节点一个,负责管理它所在节点上的存储。

HDFS设计思想

从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组DataNode(server)之上。NameNode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录,同时它也负责确定数据块到具体DataNode节点的映射。DataNode负责处理文件系统客户端的读写请求,在NameNode的统一调度下进行数据块的创建、删除和复制。

HDFS框架结构

 

HDFS使用Java语言开发,因此任何支持Java的机器都可以部署NameNode或DataNode。 由于采用了可移植性极强的Java语言,这就使得HDFS可以部署到几乎所有类型的机器上。

三.NameNode

1.NameNode的作用

  • 元数据管理:Namenode 是HDFS的元数据节点,负责文件系统的名字空间(Namespace)管理以及客户端对文件的访问。
  • 文件元数据操作:NameNode 负责文件元数据的操作,如创建、删除、重命名文件或目录。
  • 数据块管理:NameNode 决定数据块的副本存放在哪些 DataNode 上。读取文件时,NameNode 会尽量让用户先读取最近的副本(通过网络拓扑距离来衡量),以降低带宽消耗和读取时延。
  • 心跳机制:NameNode 周期性地从每个 DataNode 接收心跳信号和块状态报告。心跳信号表示 DataNode 工作正常,块状态报告包含 DataNode 上所有数据块的信息列表。

2. NameNode 的目录结构

NameNode 的元数据存储在本地文件系统的以下目录中:${dfs.name.dir}/current/

包含以下文件:

  • VERSION:是Java properties 文件,保存 HDFS 的版本信息
  • edits:修改日志(Edit Log),记录对文件系统元数据的修改。存储在本地文件系统中。
  • fsimage:命名空间镜像文件,保存整个文件系统的命名空间包括数据块映射信息,文件属性等等。存储在本地文件系统中。
  • fstime:记录最后一次检查点(checkpoint)的时间。

3. NameNode 的启动与检查点

NameNode 在内存中保存着整个文件系统的命名空间和文件数据块映射的映像,这个关键的元数据结构设计得非常紧凑,因而一个有4G内存的NameNode就足以支撑巨大量的文件和目录。

(1)启动过程

  • NameNode 从硬盘读取 FsImage 和 Edit Log。
  • 将 Edit Log 中的事务应用到内存中的 FsImage。
  • 将更新后的 FsImage 保存到本地磁盘,并删除旧的 Edit Log。

(2)检查点(Checkpoint)

  • 定期将内存中的元数据保存到 FsImage,并清理 Edit Log。
  • 由 Secondary NameNode 辅助完成。

4. Secondary NameNode 的作用

(1)辅助 NameNode

  • Secondary NameNode 不是 NameNode 的备用节点,而是辅助 NameNode 完成检查点。
  • 主要功能是定期合并 FsImage 和 Edit Log,防止 Edit Log 过大。

(2)检查点过程

  1. Secondary NameNode 通知 NameNode 生成新的 Edit Log。
  2. 从 NameNode 获取 FsImage 和旧的 Edit Log。
  3. 将 FsImage 加载到内存,并应用 Edit Log 中的事务,生成新的 FsImage。
  4. 将新的 FsImage 传回 NameNode。
  5. NameNode 更新 FsImage 和 Edit Log,并记录检查点时间。

Secondary NameNode并不是NameNode出现问题时候的备用节点,它和NameNode负责不同的事情。其主要功能就是周期性地将NameNode的命名空间镜像文件和修改日志合并,以防日志文件过大。合并过后的命名空间镜像文件也在Secondary NameNode保存了一份,以防止在 NameNode失败的时候,可以安全恢复。Secondary NameNode 通常在一个独立的机器上运行,它的内存要求和主 NameNode 是一样的。Secondary NameNode在配置后通过 start-dfs.sh 启动。

四.DateNode

1.DataNode的作用

  • 数据存储:DataNode是文件系统中真正存储数据的地方,一个数据块在DataNode磁盘存储时,会存储数据块本身,以及元数据包括数据块的长度、块数据的校验和、以及时间戳。
  • 数据块管理:DataNode是HDFS文件系统的工作节点,DataNode会按照客户端或者是NameNode的调度来存储和检索数据,并定期向NameNode发送它所存储的数据块列表。
  • 与 NameNode 通信:DataNode启动后向NameNode注册,注册成功后,周期性每小时向NameNode上报所有的块信息,心跳频率每3秒一次,心跳返回结果带有 NameNode 给该 DataNode 的命令,如复制块数据到另一台机器,或删除某个数据块等等。
  • 节点状态:如果 NameNode超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。集群在运行中可以安全地加入或剔除状态异常的机器。

2. DataNode 的目录结构

DataNode 的数据存储目录结构如下:${dfs.data.dir}/current/

包含以下内容:

  • VERSION:存储 DataNode 的版本信息。
  • blk_<id>存储数据块的二进制数据。
  • blk_<id>.meta存储数据块的元数据,包括校验和、长度和时间戳。

五 .HDFS数据块

1.数据块大小:默认情况下,HDFS 的数据块大小为 128MB(Hadoop 2.x 及以上版本)或 64MB(Hadoop 1.x 版本)。用户可以根据需要调整块大小。

2.数据块分布:HDFS 通过数据块副本机制实现高容错性。默认情况下,每个数据块会被复制到 3 个不同的 DataNode 上。

而在传统的块存储介质中,块是读写的最小数据单位(扇区),传统文件系统是基于存储块进行操作 的,为了节省文件分配表空间,一般会对物理存储块进行整合,通常为 4KB 或 64KB。

那为什么HDFS 的块远远大于传统文件系统的块?

  • 块大小较小,文件会被分割成更多的数据块,导致元数据量大幅增加,占用大量 NameNode 内存。较大的块大小可以减少元数据量,降低 NameNode 的内存压力。NameNode 的元数据管理更加高效。
  • 减少寻址开销:在传统文件系统中,较小的块大小会导致更多的磁盘寻址操作,增加 I/O 开销。HDFS 的较大块大小可以减少寻址次数,提高数据访问效率
  • HDFS 设计用于处理大规模数据,适合流式数据访问(即顺序读取大文件)。较大的块大小可以减少数据块的切换频率提高数据读取的吞吐量

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2314047.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring(4)——响应相关

一、返回静态页面 1.1**RestController和Controller** 想返回如下页面&#xff1a; 如果我们依旧使用原来的**RestController** 可以看到的是仅仅返回了字符串。 此时将**RestController改为Controller** 可以看到这次返回的是html页面。 那么**RestController和Controller…

axure11安装教程包含下载、安装、汉化、授权(附安装包)图文详细教程

文章目录 前言一、axure11安装包下载二、axure11安装教程1.启动安装程序2.安装向导界面3.安装协议协议页面2.选择安装位置3.开始安装4.完成安装 三、axure11汉化教程1.axure11汉化包2.axure11汉化设置 四、axure11授权教程1.打开axure112.设置使用方式3.输入许可证号4.axure11安…

Redis-缓存穿透击穿雪崩

1. 穿透问题 缓存穿透问题就是查询不存在的数据。在缓存穿透中&#xff0c;先查缓存&#xff0c;缓存没有数据&#xff0c;就会请求到数据库上&#xff0c;导致数据库压力剧增。 解决方法&#xff1a; 给不存在的key加上空值&#xff0c;防止每次都会请求到数据库。布隆过滤器…

Windows server网络安全

摘要 安全策略 IP安全策略&#xff0c;简单的来说就是可以通过做相应的策略来达到放行、阻止相关的端口&#xff1b;放行、阻止相关的IP&#xff0c;如何做安全策略&#xff0c;小编为大家详细的写了相关的步骤&#xff1a; 解说步骤&#xff1a; 阻止所有&#xff1a; 打…

Python从入门到精通1:FastAPI

引言 在现代 Web 开发中&#xff0c;API 是前后端分离架构的核心。FastAPI 凭借其高性能、简洁的语法和自动文档生成功能&#xff0c;成为 Python 开发者的首选框架。本文将从零开始&#xff0c;详细讲解 FastAPI 的核心概念、安装配置、路由设计、请求处理以及实际应用案例&a…

Leetcode做题记录----2

1、两数之和 思路&#xff1a; 1、不能使用相同元素&#xff0c;可以想到哈希表&#xff0c;&#xff0c;C#中可以通过字典建立当前值和下标的关系 2、显然&#xff0c;依次判断数组中的每个数即可 3、定义other target - num[ i ] 这个other就是我们用于在字典中进行寻找…

批量合并 Word 文档,支持合并成一个 Word,也支持按文件夹合并

我们经常会碰到需要将多个 Word 文档批量合并成一个 Word 文档的场景&#xff0c;比如需要合并后打印、合并后方便整理存档等等。如果是人工的操作&#xff0c;会非常的麻烦。因此我们通常会借助一些批量处理脚本或者寻找批量处理的工具来帮我们实现批量合并 Word 文档的操作。…

项目实操分享:一个基于 Flask 的音乐生成系统,能够根据用户指定的参数自动生成 MIDI 音乐并转换为音频文件

在线体验音乐创作&#xff1a;AI Music Creator - AI Music Creator 体验者账号密码admin/admin123 系统架构 1.1 核心组件 MusicGenerator 类 负责音乐生成的核心逻辑 包含 MIDI 生成和音频转换功能 管理音乐参数和音轨生成 FluidSynth 集成 用于 MIDI 到音频的转换 …

神经网络为什么要用 ReLU 增加非线性?

在神经网络中使用 ReLU&#xff08;Rectified Linear Unit&#xff09; 作为激活函数的主要目的是引入非线性&#xff0c;这是神经网络能够学习复杂模式和解决非线性问题的关键。 1. 为什么需要非线性&#xff1f; 1.1 线性模型的局限性 如果神经网络只使用线性激活函数&…

动态规划详解(二):从暴力递归到动态规划的完整优化之路

目录 一、什么是动态规划&#xff1f;—— 从人类直觉到算法思维 二、暴力递归&#xff1a;最直观的问题分解方式 1. 示例&#xff1a;斐波那契数列 2. 递归树分析&#xff08;以n5为例&#xff09; 3. 问题暴露 三、第一次优化&#xff1a;记忆化搜索&#xff08;Memoiza…

ubuntu下在pycharm中配置已有的虚拟环境

作者使用的ubuntu系统位于PC机上的虚拟机。系统版本为&#xff1a; 在配置pycharm解释器之前你需要先创建虚拟环境以及安装pycharm。 作者创建的虚拟环境位于/home/topeet/miniconda3/envs/airproject/&#xff0c;如下图所示&#xff1a; 作者安装的pycharm版本为2023社区…

爬虫中一些有用的用法

文本和标签在一个级别下 如果文本和a标签在一个级别下 比如&#xff1a; # 获取a标签后的第一个文本节点text_node a.xpath(following-sibling::text()[1])[0].strip() 将xpath的html代码转换成字符串 etree.tostring(root, pretty_printTrue, encoding"utf-8")…

DeepIn Wps 字体缺失问题

系统缺失字体 Symbol 、Wingdings 、Wingdings2、Wingdings3、MT—extra 字体问题 问了下DeepSeek 在应用商店安装或者在windows 里面找 装了一个GB-18030 还是不行 在windows里面复制了缺失的字体 将字体复制到DeepIn 的字体目录&#xff08;Ubuntu 应该也是这个目录&am…

【webrtc debug tools】 rtc_event_log_to_text

一、rtc_event_log 简介 在学习分析webrtc的过程中&#xff0c;发现其内部提供了一个实时数据捕获接口RtcEventLog。通过该接口可以实时捕获进出webrtc的RTP报文头数据、音视频配置参数、webrtc的探测数据等。其内容实现可参考RtcEventLogImpl类的定义。其文件所在路径 loggin…

数字IC后端项目典型问题(2025.03.10数字后端项目问题记录)

小编发现今天广大学员发过来的问题都比较好&#xff0c;立即一顿输出分享给大家&#xff08;每天都有好多种类的数字后端问题&#xff09;。后续可能会经常通过这种方式来做分享。其实很多问题都是实际后端项目中经常遇到的典型问题。希望通过这种方式的分享能够帮助到更多需要…

Redis 持久化详解:RDB 与 AOF 的机制、配置与最佳实践

目录 引言 1. Redis 持久化概述 1.1 为什么需要持久化&#xff1f; 1.2 Redis 持久化的两种方式 2. RDB 持久化 2.1 RDB 的工作原理 RDB 的触发条件 2.2 RDB 的配置 2.3 RDB 的优缺点 优点 缺点 3. AOF 持久化 3.1 AOF 的工作原理 AOF 的触发条件 3.2 AOF 的配置…

说一下spring的事务隔离级别?

大家好&#xff0c;我是锋哥。今天分享关于【说一下spring的事务隔离级别&#xff1f;】面试题。希望对大家有帮助&#xff1b; 说一下spring的事务隔离级别&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring的事务隔离级别是指在数据库事务管理中…

Java 大视界 -- 基于 Java 的大数据实时数据处理框架性能评测与选型建议(121)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

NAT NAPT

NAT NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09; 主要用于在不同网络&#xff08;如私有网络和公共互联网&#xff09;之间进行 IP 地址转换&#xff0c;解决IP 地址短缺问题&#xff0c;并提供一定的安全性。 IPv4 地址是 32 位&#xf…

harmonyOS(鸿蒙)— 网络权限(解决app网络资源无法加载,图片无法显示)

harmonyOS系列 harmonyOS&#xff08;网络权限&#xff09; 一、问题梳理二、代码及图示 一、问题梳理 在鸿蒙app的开发里会有联网业务无法加载&#xff0c;图片无法显示的情况&#xff0c;多半是系统的网络权限没有申请&#xff0c;所以无法使用需要网络加载的资源&#xff0…