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分布式处理实战

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

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

相关文章

基于UDP和TCP实现回显服务器

目录 一. UDP 回显服务器 1. UDP Echo Server 2. UDP Echo Client 二. TCP 回显服务器 1. TCP Echo Server 2. TCP Echo Client 回显服务器 (Echo Server) 就是客户端发送什么样的请求, 服务器就返回什么样的响应, 没有任何的计算和处理逻辑. 一. UDP 回显服务器 1. UD…

STM32完全学习——使用标准库完成PWM输出

一、TIM2初始化 我这里使用的是STM32F407ZGT6这个芯片,我这里使用的是定时器TIM2来完成PWM输出,由于这里没有使用中断,因此不需要初始化NVIC,下面先来进行定时器的相关初始化 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;R…

Qt Qt::UniqueConnection 底层调用

在这里插入图片描述 步骤1: 1:判断槽函数连接方式, 以及信号对象是否有效2: 信号计算格式是否 大于 signal_index 目前调试 signal_index 不太清楚怎末计算的(有清楚的帮忙街道)3:获取槽函数对…

7-10 解一元二次方程

7-10 解一元二次方程 分数 20 全屏浏览 切换布局 作者 李祥 单位 湖北经济学院 请编写程序,解一元一次方程 ax2bxc0 。 已知一元二次方程的求根公式为: 要求: 若 a0,则为一元一次方程。 若 b0,则方程有唯一解&…

Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(三)

本篇紧跟第一篇, 和 第二篇无关 Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案 Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(二) 先说需求: 某业务配置表,按配置的时间区间及组织层级取方…

(免费送源码)计算机毕业设计原创定制:Java+JSP+HTML+JQUERY+AJAX+MySQL springboot计算机类专业考研学习网站管理系统

摘 要 大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在大学生在线计算机类专业考研学习网站管理的要求下,开发一…

Varjo:垂直起降机混合现实培训解决方案

混合电动垂直起降机(VTOL)作为一种新型的航空运输机具有超越传统汽车的安全性、与飞机相当的速度以及无与伦比的灵活起降功能。电动垂直起降机能够在建筑顶部、直升机场或是没有跑道的地区起飞或降落,且排放要远远低于由航空汽油驱动的传统飞…

Android 实现悬浮球的功能

Android 实现悬浮球的功能 在 Android 中&#xff0c;实现悬浮球可以通过以下方式实现&#xff0c;常见的方法是使用 WindowManager 创建一个悬浮窗口。以下是具体的实现步骤&#xff1a; 1. 配置权限 在 AndroidManifest.xml 中添加悬浮窗权限&#xff1a; <uses-permis…

[Python3学习笔记-基础语法] Python3 基础语法

本篇文章详细介绍Python3的基础语法&#xff0c;主要包括编码、标识符、Python保留字、注释、行缩进、多行语句、Number类型、字符串、空行、print打印等。 这些是Python最基础的东西&#xff0c;掌握好了才能更好的学习后续的内容。 有兴趣共同结伴学习Python的朋友&#xff0…

RabbitMQ3:Java客户端快速入门

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

Gradio学习笔记记录

安装指令&#xff1a;pip install gradio方法介绍 Interface》用于构建一些简单的页面&#xff0c;可以直接用这个指令搞定 形式》接收三个参数分别为处理函数、输入、输出三部分&#xff0c;呈现一般左/上为输入&#xff0c;右或下为输出 fn&#xff1a;将用户界面 &#xff0…

✅ Qt流式布局

Qt流式布局 前段时间&#xff0c;曾经对某个软件的一个“流式布局”有点感兴趣&#xff0c;什么叫“流式布局”呢&#xff1f;请看下图: 简而言之&#xff0c;流式布局就是布局应能够根据界面尺寸的变化自动调整其内部控件的位置。然而&#xff0c;Qt 提供的标准布局&#xff…

为什么我们需要DDD?DDD领域驱动设计入门及案例讲解(图文并茂+浅显易懂)

DDD领域驱动设计入门目录 Q1&#xff1a;为什么需要DDD领域驱动设计模型&#xff1f;Q2&#xff1a;DDD领域驱动设计模型怎么用&#xff1f;设计领域模型的一般步骤一、战略建模&#xff08;从高处俯瞰业务 - 微服务的宏观规划&#xff09;1. 领域划分2. 界限上下文定义3. 统一…

vue--制作购物车

&#x1f914;如何制作出下列效果呢&#xff1f;&#x1f447; &#x1f636;‍&#x1f32b;️首先: 设置css样式&#xff1a; <style>body {font-family: Arial, sans-serif;}.cart-item {width: 50%;margin-bottom: 15px;padding: 10px;border: 2px solid gray;borde…

MFC 对话框中显示CScrollView实例

有时候我们需要在对话框中显示CScrollView效果的控件&#xff0c;类似于以下效果&#xff1a; 使用实例可参考&#xff1a;MFC对话框显示CScrollView例子_哔哩哔哩_bilibili 创建CScrollView中显示的子对话框与子类&#xff1a; 两个对话框对应的类&#xff1a; CScrollView继…

高危,Laravel参数注入漏洞安全风险通告

今日&#xff0c;亚信安全CERT监控到安全社区研究人员发布安全通告&#xff0c;披露了Laravel 参数注入漏洞(CVE-2024-52301)。在受影响的版本中&#xff0c;Application.php 文件的 detectEnvironment 函数直接使用了 $_SERVER[argv]&#xff0c;但没有检查运行环境是否为 CLI…

【unity小技巧】unity常用的编辑器扩展

文章目录 1. **自定义 Inspector&#xff08;Inspector 面板&#xff09;**示例&#xff1a; 2. **Editor Window&#xff08;自定义编辑器窗口&#xff09;**示例&#xff1a; 3. **PropertyDrawer&#xff08;自定义属性绘制&#xff09;**示例&#xff1a; 4. **菜单项&…

数字化工厂 MES试点方案全解析(二)

生产过程监控与数据采集 在生产线上部署各类传感器、数据采集终端等设备&#xff0c;与 MES 系统相连&#xff0c;实时采集生产数据&#xff0c;如设备运行参数&#xff08;温度、压力、转速等&#xff09;、产品加工数据&#xff08;尺寸、重量、加工时间等&#xff09;、物料…

5G CPE与4G CPE的主要区别有哪些

什么是CPE&#xff1f; CPE是Customer Premise Equipment&#xff08;客户前置设备&#xff09;的缩写&#xff0c;也可称为Customer-side Equipment、End-user Equipment或On-premises Equipment。CPE通常指的是位于用户或客户处的网络设备或终端设备&#xff0c;用于连接用户…

【海思Hi3519DV500】双目网络相机套板硬件规划方案

Hi3519DV500双目网络相机套板是针对该芯片设计的一款 IP 编码板 PCBA&#xff0c;硬件接口支持双目sensor 接入&#xff0c;SDIO3.0 接口、USB2.0、USB3.0、UART 接口以及丰富的 IO 扩展应用&#xff0c;可根据各种使用场景设计相应扩展板&#xff0c;丰富外围接口&#xff0c;…