Hadoop分布式文件系统(一)——HDFS简介

目录

  • 1. HDFS设计目标
  • 2. HDFS组件
  • 3. HDFS数据复制
  • 4. HDFS健壮性
    • 4.1 磁盘数据错误,心跳检测和重新复制
    • 4.2 集群均衡
    • 4.3 数据完整性
    • 4.4 元数据磁盘错误
    • 4.5 快照
  • 5. HDFS数据组织
    • 5.1 数据块存储
    • 5.2 流水线复制
    • 5.3 文件的删除和恢复
  • 参考

1. HDFS设计目标

  1.错误检测和快速、自动的恢复。
  2.支持大文件存储和访问。
  3.保证数据的一致性。
  4.移动计算,而不是移动数据。
  5.异构软硬件平台间可移植。

2. HDFS组件

  HDFS的组件由Namenode,Datanode,Secondary Namenode组成。

组件功能
NamenodeHDFS的守护进程,用来管理文件系统的命名空间,负责记录文件是如何分割成数据块,以及这些数据块分别被存储在哪些数据节点上,并且对内存和IO进行集中管理。
Datanode文件系统的工作节点,根据需要存储和检索数据块,并且定期向Namenode发送它们所存储的块的列表
Secondary Namenode辅助后台程序,与Namenode进行通信,以便定期保存HDFS元数据的快照,用以备份和恢复数据

  在Namenode的数据文件夹中,fsimage保存了元数据镜像文件(文件系统的目录树),而edits保存了元数据的操作日志(针对文件系统做的修改操作记录)。Namenode内存中存储的元数据可以用fsimage+edits表达。任何对文件系统元数据产生修改的操作,Namenode都会使用一种称为Editlog的事务日志进行记录。Namenode在本地操作系统的文件系统中存储这个Editlog。
在这里插入图片描述
  Secondary Namenode负责定时从Namenode上获取fsimage和edits进行合并,然后再发送给Namenode,减少Namenode的工作量。
  HDFS采用master/slave主从结构,一个HDFS集群由一个Namenode和一定数量的Datanode组成。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录,也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求,在Namenode的统一调度下进行数据块的创建、删除和复制。HDFS架构如下图所示。
在这里插入图片描述
  Namenode在内存中保存着整个文件系统的名字空间和文件数据块映射的映像,这个关键的元数据结构设计得很紧凑。当Namenode启动时,它从硬盘中读取Editlog和FsImage,将所有Editlog中的事务作用在内存中的FsImage上,并将这个新版本的FsImage从内存中保存到本地磁盘上并删除旧的Editlog。这个过程称为一个检查点。
  Datanode将HDFS数据以文件的形式存储在本地的文件系统中,它并不知道有关HDFS文件的信息。它把每个HDFS数据块存储在本地文件系统的一个单独的文件中。Datanode并不在同一个目录创建所有的文件,实际上,它用试探的方法来确定每个目录的最佳文件数量,并且在适当的时候创建子目录。在同一个目录中创建所有的本地文件并不是最优的选择,这是因为本地文件系统可能无法高效地在单个目录中支持大量的文件。当一个Datanode启动时,它会扫描本地文件系统,产生一个这些本地文件对应的所有HDFS数据块的列表,然后作为报告发送到Namenode,这个报告是块状态报告。
  文件写入流程:
  1.客户端向Namenode发起文件写入请求。
  2.Namenode根据文件大小和文件块配置情况,返回给客户端所管理部分Datanode的信息。
  3.客户端将文件划分成多个块,根据Datanodede的地址信息,按顺序写入到每一个Datanode块中。
  文件读取流程:
  1.客户端向Namenode发起文件读取的请求。
  2.Namenode返回文件存储的Datanode的信息。
  3.客户端读取文件信息。

3. HDFS数据复制

  HDFS将每个文件存储成一系列的数据块,除了最后一个以外,所有数据块都是同样大小的,Hadoop3.X默认数据块大小为128MB。文件的所有数据块都有副本。HDFS的文件都是一次性写入的,并且严格要求在任何时候都只能有一个写入者。
  Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了该Datanode上所有数据块的列表。
  HDFS采用机架感知的策略。大多数情况下,副本数量为3。HDFS将一个副本存放在本地机架的节点上,一个副本存放在同一机架的另一个节点上,最后一个副本存放在不同机架的节点上。HDFS会尽量让读取程序读取离它最近的的副本。

4. HDFS健壮性

  HDFS中常见的出错情况有Namenode出错,Datanode出错和网络割裂。HDFS提供了多种错误恢复手段,保证了系统的健壮性。

4.1 磁盘数据错误,心跳检测和重新复制

  每个Datanode节点周期性向Namenode发送心跳信号。网络割裂导致一部分Datanode与Namenode失去联系。Namenode通过心跳信号的缺失来检测这一情况,并将这些最近不再发送心跳信号的Datanode标记为死机,不会再将新的IO请求发送给它们。任何存储在死机上的数据不再有效。Datanode的死机可能会引起一些数据块的副本数量低于指定值,Namenode不断地检测这些需要复制的数据块,一旦发现就启动复制操作。

4.2 集群均衡

  HDFS支持数据均衡策略。如果某个Datanode节点上的空闲空间低于特定的临界点,按照均衡策略系统就会自动地将数据从这个Datanode移动到其他空闲的Datanode。当对某个文件的请求突然增加时,也可能启动一个计划创建该文件新的副本,并且同时重新平衡集群中的其他数据。

4.3 数据完整性

  从某个Datanode获取的数据块可能是损坏的,损坏可能是由于Datanode的存储设备错误,网络错误或者软件漏洞引起的。HDFS客户端软件实现了对HDFS文件内容的校验和检查。当客户端创建一个新的HDFS文件时,会计算这个文件每个数据块的校验和,并将校验和作为一个单独的隐藏文件保存在同一个HDFS名字空间下。当客户端获取文件内容后,它会校验从Datanode获取的数据以及相应的校验和与文件中的校验和是否匹配,如果不匹配,客户端可以选择从其他Datanode获取该数据块的副本。

4.4 元数据磁盘错误

  FsImage和Editlog是HDFS的核心数据结构。如果这些文件损坏,整个HDFS实例都将失效。因而,Namenode可以配置成支持维护多个FsImage和Editlog的副本。任何对FsImage和Editlog的修改都将同步到它们的副本上。这种多副本的同步操作可能会降低Namenode每秒处理的名字空间事务数量。然而这个代价是可以接受的,因为即使HDFS的应用是数据密集的,它们也非元数据密集的。当Namenode重启的时候,它会选择最近的完整的FsImage和Editlog来使用。

4.5 快照

  快照支持某一特定时刻的数据的复制备份。利用快照,可以让HDFS在数据损坏时恢复到过去一个已知正确的时间点。

5. HDFS数据组织

  HDFS数据组织包括HDFS的数据块复制、流水线复制、文件的删除和恢复等机制,保障了HDFS高效和可靠地存储数据。

5.1 数据块存储

  HDFS支持文件的一次写入,多次读取的语义。一个典型的数据块大小为128MB,因而HDFS中的文件总是按照128MB被切分成不同的块,每个块尽可能地存储于不同的Datanode中。

5.2 流水线复制

  当客户端向HDFS文件写入数据时,一开始是写到本地临时文件中。假设该文件的副本系数设置为3,当本地临时文件累积到一个数据块的大小时,客户端会从Namenode获取一个Datanode列表用于存放副本,然后客户端开始向第一个Datanode传输数据。第一个Datanode一小部分一小部分(4KB)地接受数据,将每一部分写入本地仓库,并且同时传输该部分到列表中第二个Datanode。第二个Datanode也是这样接收并进行写入,同时传输给第三个Datanode。最后第三个Datanode也是这样接受并进行写入。
  Datanode能流水线地从前一个节点接受数据,并且同时转发给下一个Datanode,数据以流水线的方式从前一个Datanode复制到下一个Datanode。

5.3 文件的删除和恢复

  当用户或应用程序删除某个文件时,这个文件并没有立刻从HDFS中删除。HDFS会将这个文件重命名转移到/trash目录。只要文件还在/trash目录中,该文件就可以被迅速地恢复。文件在/trash中保存的时间是可以配置的,当超过这个时间,Namenode就会将该文件从名字空间中删除,删除文件会使该文件相关的数据块被释放。
  如果用户希望恢复删除的文件,可以浏览/trash目录找回该文件。/trash目录仅仅保存被删除文件的最后副本。在/trash目录上HDFS会应用一个特殊策略来自动删除文件,这个默认策略是删除/trash中保留时间超过6小时的文件。

参考

吴章勇 杨强著 大数据Hadoop3.X分布式处理实战

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VUE练习

使用new Vue()创建Vue实例&#xff0c;传入配置对象&#xff08;el data&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial…

论文笔记3-XCube: Large-Scale 3D Generative Modeling using Sparse Voxel Hierarchies

目录 Abtract 相关工作 核心算法&#xff1a; 整体流程概述 具体流程解析 1. 输入&#xff08;Input&#xff09; 2. 稀疏结构 VAE&#xff08;Sparse Structure VAE&#xff09; 3.分层体素潜在扩散&#xff08;Hierarchical Voxel Latent Diffusion&#xff09;…

js.二叉搜索树中第K小的元素

链接&#xff1a;230. 二叉搜索树中第 K 小的元素 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数&#xff09;。 示例 1…

RabbitMQ 安装延迟队列插件 rabbitmq_delayed_message_exchange

前言&#xff1a; RabbitMQ 延迟队列插件&#xff08;rabbitmq_delayed_message_exchange&#xff09;是一个社区开发的插件&#xff0c;它为 RabbitMQ 添加了支持延迟消息的功能。通过这个插件&#xff0c;用户可以创建一种特殊的交换机类型 x-delayed-message&#xff0c;该…

Java安全—原生反序列化重写方法链条分析触发类

前言 在Java安全中反序列化是一个非常重要点&#xff0c;有原生态的反序列化&#xff0c;还有一些特定漏洞情况下的。今天主要讲一下原生态的反序列化&#xff0c;这部分内容对于没Java基础的来说可能有点难&#xff0c;包括我。 序列化与反序列化 序列化&#xff1a;将内存…

【人工智能】深入解析GPT、BERT与Transformer模型|从原理到应用的完整教程

在当今人工智能迅猛发展的时代&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域涌现出许多强大的模型&#xff0c;其中GPT、BERT与Transformer无疑是最受关注的三大巨头。这些模型不仅在学术界引起了广泛讨论&#xff0c;也在工业界得到了广泛应用。那么&#xff0c;G…

d3-contour 生成等高线图

D3.js 是一个强大的 JavaScript 库&#xff0c;用于创建动态、交互式数据可视化。d3-contour 是 D3.js 的一个扩展模块&#xff0c;用于生成等高线图&#xff08;contour plots&#xff09;。 属性和方法 属性 x: 一个函数&#xff0c;用于从数据点中提取 x 坐标。y: 一个函…

Apache Zeppelin:一个基于Web的大数据可视化分析平台

今天给大家推荐一下 Apache Zeppelin&#xff0c;它是一个基于 Web 的交互式数据接入、数据分析、数据可视化以及协作文档 Notebook&#xff0c;类似于 Jupyter Notebook。 Apache Zeppelin 支持使用 SQL、Java、Scala、Python、R 等编程语言进行数据处理和分析&#xff0c;同时…

使用 pycharm 新建不使用 python 虚拟环境( venv、conda )的工程

有时候我们发现一个好玩的 demo&#xff0c;想赶快在电脑上 pip install 一下跑起来&#xff0c;发现因为 python 的 venv、conda 环境还挺费劲的&#xff0c;因为随着时间的发展&#xff0c;之前记得很清楚的 venv、conda 的用法&#xff0c;不经常使用&#xff0c;半天跑不起…

计算机网络 实验八 应用层相关协议分析

一、实验目的 熟悉CMailServer邮件服务软件和Outlook Express客户端软件的基本配置与使用&#xff1b;分析SMTP及POP3协议报文格式和SMTP及POP3协议的工作过程。 二、实验原理 为了观察到邮件发送的全部过程&#xff0c;需要在本地计算机上配置邮件服务器和客户代理。在这里我…

vue 实现关键字高亮效果

vue 实现关键字高亮效果 这是啥子意思呢&#xff0c;就是类似于百度搜索&#xff0c;根据关键词搜索结果&#xff0c;搜索结果中&#xff0c;与关键词相同的字显示红色&#xff0c;仅此而已&#xff0c;没有什么大的功能。简单写一下demo。 环境 我使用的是 vue3 ts 的语法来…

【大数据学习 | Spark-Core】广播变量和累加器

1. 共享变量 Spark两种共享变量&#xff1a;广播变量&#xff08;broadcast variable&#xff09;与累加器&#xff08;accumulator&#xff09;。 累加器用来对信息进行聚合&#xff0c;相当于mapreduce中的counter&#xff1b;而广播变量用来高效分发较大的对象&#xff0c…

2024年11月24日Github流行趋势

项目名称&#xff1a;FreeCAD 项目维护者&#xff1a;wwmayer, yorikvanhavre, berndhahnebach, chennes, WandererFan等项目介绍&#xff1a;FreeCAD是一个免费且开源的多平台3D参数化建模工具。项目star数&#xff1a;20,875项目fork数&#xff1a;4,117 项目名称&#xff1…

零基础学安全--shell脚本学习(1)脚本创建执行及变量使用

目录 学习连接 什么是shell shell的分类 查看当前系统支持shell 学习前提 开始学习 第一种执行脚本方法 ​编辑 第二种执行脚本方法 第三种执行脚本方法 变量声明和定义 ​编辑 查看变量 删除变量 学习连接 声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣…

Java后端如何进行文件上传和下载 —— 本地版

简介&#xff1a; 本文详细介绍了在Java后端进行文件上传和下载的实现方法&#xff0c;包括文件上传保存到本地的完整流程、文件下载的代码实现&#xff0c;以及如何处理文件预览、下载大小限制和运行失败的问题&#xff0c;并提供了完整的代码示例。 大体思路 1、文件上传 …

Z2400024基于Java+SSM+mysql+maven开发的社区论坛系统的设计与实现(附源码 配置 文档)

基于SSM开发的社区论坛系统 1.摘要2.主要功能3.系统运行环境4.项目技术5.系统界面截图6.源码获取 1.摘要 本文介绍了一个基于SSM&#xff08;Spring、Spring MVC、MyBatis&#xff09;框架开发的社区论坛系统。该系统旨在打造一个高品质的开发者社区&#xff0c;为开发者提供一…

JAVA笔记 | 策略模式+枚举Enum简单实现策略模式(可直接套用)

本篇为更为简单的策略模式应用&#xff0c;使用枚举来进行策略分配 上一篇(链接如下)更像是策略工厂模式来分配策略 JAVA笔记 | 实际上用到的策略模式(可直接套用)-CSDN博客 先创建策略相关类 //策略类 public interface PetStrategy {/*** 执行动作 - 跑RUN*/String run(Str…

RabbitMQ 篇-深入了解延迟消息、MQ 可靠性(生产者可靠性、MQ 可靠性、消费者可靠性)

??博客主页&#xff1a;【_-CSDN博客】** 感谢大家点赞??收藏评论** 文章目录 ???1.0 RabbitMQ 的可靠性 ? ? ? ? 2.0 发送者的可靠性 ? ? ? ? 2.1 生产者重试机制 ? ? ? ? 2.2 生产者确认机制 ? ? ? ? 2.2.1 开启生产者确认机制 ? ? ? ? 2.2…

Redis(概念、IO模型、多路选择算法、安装和启停)

一、概念 关系型数据库是典型的行存储数据库&#xff0c;存在的问题是&#xff0c;按行存储的数据在物理层面占用的是连续存储空间&#xff0c;不适合海量数据存储。 Redis在生产中使用的最多的是用作数据缓存。 服务器先在缓存中查询数据&#xff0c;查到则返回&#xff0c;…

JAVA:Spring Boot 3 实现 Gzip 压缩优化的技术指南

1、简述 随着 Web 应用的用户量和数据量增加&#xff0c;网络带宽和页面加载速度逐渐成为瓶颈。为了减少数据传输量&#xff0c;提高用户体验&#xff0c;我们可以使用 Gzip 压缩 HTTP 响应。本文将介绍如何在 Spring Boot 3 中实现 Gzip 压缩优化。 2、配置 Spring Boot 3 对…