HDFS的Federation机制提高存储能力及读写性能的实现原理和Erasure Coding节省存储空间的原理

目录

  • Federation机制的实现原理
    • 1.HDFS的分层图解
      • (1)NameSpace
      • (2)Block Storage
        • 1)Block Management
        • 2)Storage
    • 2.Federation机制的优点
    • 3.Federation机制的缺点
    • 4.Federation机制的实现
      • (1)前提准备
      • (2)修改hdfs-site.xml配置文件
      • (3)分发hdfs-site.xml配置文件
      • (4)格式化HDFS文件系统
      • (5)启动Hadoop集群
      • (6)使用不同的NameNode
  • Erasure Coding
    • 1.Erasure Coding存储文件的示意图
    • 2.-enablePolicy
    • 3.-setPolicy
    • 4.-getPolicy
    • 5.-unsetPolicy
    • 6.-disablePolicy

Federation机制的实现原理

HDFS提供了一种Federation(联邦)机制,该机制允许单个HDFS存在多个NameNode,从而不仅解决了HDFS的存储能力受单个NameNode的内存限制问题,而且可以提高HDFS读写数据效率。

1.HDFS的分层图解

在单个NameNode节点的HDFS中,HDFS一共分为两层。NameSpace层和Block Storage层。

在这里插入图片描述

(1)NameSpace

NameSpace是HDFS文件系统的命名空间,它主要由目录、文件和Block组成,支持所有与命名空间相关的文件系统操作,如创建、删除、修改和列出文件和目录。NameSpace由NameNode负责管理维护,任何对NameSpace的操作都将被NameNode记录下来。

(2)Block Storage

Block Storage(数据块存储)主要用于管理和存储HDFS的Block,由Block Management(数据块管理器)和Storage(物理存储)两部分组成,有关这两部分的介绍如下。

1)Block Management

Block Management由NameNode负责管理,它主要包含以下几点功能:

  • 通过控制注册和定期的心跳来保证DataNode正常运行。
  • 处理Block的报告并维护Block的位置。
  • 支持与Block相关的操作。
  • 管理Block的副本,针对未完成复制的Block进行复制,并删除过度复制的Block。
2)Storage

Storage由DataNode负责管理,它可以在本地文件系统上存储Block,并且提供对Block进行读写的操作。

为了横向扩展NameSpace,Federation机制使用多个独立的NameNode,每个NameNode是相互独立的,各自管理自己的NameSpace,且不需要互相协调。DataNode要向所有NameNode注册,且周期性地向所有NameNode发送心跳信息和Block状态报告,并执行来着所有NameNode的命令。

Federation功能图解

  • HDFS包含多个NameNode。

  • Block Pool主要负责管理对应NameSpace的Block。

  • 一个NameSpace和对应的Block Pool被称为命名空间卷,它是一个独立的管理单元。
    在这里插入图片描述
    由上图可知,应用Federation机制的HDFS包含多个NameNode,每个NameNode都有自己的NameSpace,每个NameSpace对应一个Block Pool(数据块池)。Block Pool主要负责管理对应NameSpace的Block,每个Block Pool都是独立管理的,不会与其他Block Pool进行交互。不过,DataNode会存储所有Block Pool管理的Block,这样即使其中一个NameNode无法使用,DataNode也可以为其他NameNode提供服务。由于每个BlockPool相互独立,所以允许NameSpace在不通知其他NameNode的情况下,为新创建的Block生成新的Block ID。

    一个NameSpace和对应的Block Pool称为命名空间卷(NameSpace Volume),它是一个独立的管理单元,当一个NameNode或者NameSpace被删除时,DataNode上对应的Block Pool也会被删除。在集群升级期间,每个命名空间卷都将作为一个单元进行升级。

2.Federation机制的优点

1.NameSpace的可扩展性

NameSpace通过水平扩展,在集群中增加更多的NameNode,提供读写和内存存储。

2.高性能

文件系统吞吐量不受单个NameNode的限制,在集群中添加更多的NameNode可以扩展文件系统读写的吞吐量。

3.隔离机制

单个NameNode对多用户环境不提供隔离,使用多个NameNode,可以将不同类别的应用和用户隔离到不同的命名空间。

3.Federation机制的缺点

1.交叉访问

如果某个应用要交叉访问存储在HDFS的多个文件,而这些文件存在于不同的NameSpace中,那么将不可避免的产生交叉访问不同NameSpace的情况。

2.数据移动效率低

不同NameSpace之间移动文件非常繁琐,无法简单地通过HDFS Shell子命令dfs的子命令选项-cp或-mv实现。

Federation机制的实现,主要是通过修改Hadoop的自定义配置文件hdfs-site.xml实现,该配置文件存在参数dfs.nameservices用于指定多个NameNode中不同NameSpace的唯一标识符,通过NameSpace的唯一标识符可以指定不同NameNode的配置信息,例如NameNode的RPC通信地址、Http通信地址等。

接下来,演示基于完全分布式模式部署的Hadoop为基础实现Federation机制,所以要先关闭Hadoop的YARN和HDFS,以及删除HDFS的数据及元数据。这里分别指定虚拟机Hadoop1和Hadoop2运行NameNode。

4.Federation机制的实现

(1)前提准备

1)关闭Hadoop的HDFS和YARN

在虚拟机Hadoop1依次执行stop-yarn.shstop-dfs.sh命令关闭Hadoop的YARN和HDFS。

2)删除HDFS的数据和元数据

Hadoop配置文件core-site.xml的参数hadoop.tmp.dir可以指定存储HDFS数据和元数据的目录,由于我在基于完全分布式部署Hadoop时,指定参数hadoop.tmp.dir的值为/export/data/hadoop-3.3.0/,所以需要在虚拟机Hadoop1、Hadoop2和Hadoop3中删除目录/export/data/hadoop-3.3.0/下的内容。

rm -fr /export/data/hadoop-3.3.0/*

(2)修改hdfs-site.xml配置文件

进入虚拟机Hadoop1的/export/servers/hadoop-3.3.0/etc/hadoop/目录,在该目录下执行vi hdfs-site.xml命令编辑hdfs-site.xml配置文件,修改为如下内容。

<property><name>dfs.replication</name><value>2</value>
</property>
<property><name>dfs.nameservices</name><value>ns1,ns2</value>
</property>
<property><name>dfs.namenode.rpc-address.ns1</name><value>hadoop1:9000</value>
</property>
<property><name>dfs.namenode.http-address.ns1</name><value>hadoop1:9870</value>
</property>
<property><name>dfs.namenode.secondary.http-address.ns1</name><value>hadoop1:9880</value>
</property>
<property><name>dfs.namenode.rpc-address.ns2</name><value>hadoop2:9000</value>
</property>
<property><name>dfs.namenode.http-address.ns2</name><value>hadoop2:9870</value>
</property>
<property><name>dfs.namenode.secondary.http-address.ns2</name><value>hadoop2:9880</value>
</property>

在这里插入图片描述
在这里插入图片描述

(3)分发hdfs-site.xml配置文件

通过scp命令将虚拟机Hadoop1的hdfs-site.xml配置文件分发至虚拟机Hadoop2和Hadoop3的/export/servers/hadoop-3.3.0/etc/hadoop/目录。

将配置文件分发至虚拟机hadoop2

scp /export/servers/hadoop-3.3.0/etc/hadoop/hdfs-site.xml hadoop2:/export/servers/hadoop-3.3.0/etc/hadoop/

将配置文件分发至虚拟机hadoop3

scp /export/servers/hadoop-3.3.0/etc/hadoop/hdfs-site.xml hadoop3:/export/servers/hadoop-3.3.0/etc/hadoop/

(4)格式化HDFS文件系统

在HDFS中实现Federation机制,需要分别指定虚拟机Hadoop1和Hadoop2运行NameNode,分别在这两台虚拟机进行格式化HDFS文件系统的操作。为确保这两个NameNode处于同一HDFS中,在执行格式化HDFS文件系统的命令时,需要在虚拟机Hadoop1和Hadoop2执行使用子命令的选项-clusterId指定相同的clusterId。

hdfs namenode -format -clusterId CHQ

如果Hadoop1和Hadoop2出现“successfully format.”则说明HDFS文件系统格式化成功。

(5)启动Hadoop集群

  • 在虚拟机Hadoop1分别执行start-dfs.shstart-yarn.sh命令启动Hadoop的HDFS和YARN;
  • Hadoop启动完成后,分别在虚拟机Hadoop1、Hadoop2和Hadoop3执行jps命令查看每台虚拟机运行的进程。

在这里插入图片描述

(6)使用不同的NameNode

实现Federation机制的HDFS,每个NameNode中的NameSpace相互独立,也就是说,在某个NameSpace创建的目录不会影响其他NameSpace的目录结构。默认情况下,当通过HDFS Shell子命令的dfs通过子命令选项操作HDFS的文件目录时,会连接core-site.xml配置文件中的参数fs.defsultFS指定NameNode的RPC统信地址。

通过命令dfs的子命令选项-fs,指定虚拟机Hadoop2运行NameNode的RPC通信地址,对其NameSpace进行操作,创建目录/ns2data。

hdfs dfs -fs hdfs://hadoop2:9000 -mkdir /ns2data

执行完上述命令后,分别通过HDFS Shell通过的命令查看Hadoop1和Hadoop2运行的NameNode管理的NameSpace跟目录,如下。
在这里插入图片描述

Erasure Coding

Erasure Coding节省存储空间的原理

在Hadoop 3.x版本中,HDFS新增了Erasure Coding(纠删码),简称EC。Erasure Coding是一种编码技术,它在廉价磁盘冗余阵列(Redundant Arrays of Inexpensive Disks,缩写RAID)中广泛应用,RAID通过条带化技术实现Erasure Coding。

条带化技术是一种自动将I/O的负载均衡到多个物理磁盘上的技术,原理就是将逻辑上连续的数据(如文件)划分为较小的单位,并将连续的单位存储到不同的磁盘上。

HDFS同样通过条带化技术实现Erasure Coding,将逻辑上连续的数据(如文件)划分为较小的条带化单元(默认大小为1024K),并将连续的条带化单元存储到不同的Block上,对于条带化单元形成的每个条带,都会计算并存储一定数量的奇偶校验单元,奇偶校验单元会写入到Block,从而确保数据的容错性。与HDFS的副本机制相比Erasure Coding可以节省占用的存储空间。

接下来,展示应用Erasure Coding的HDFS如何存储文件,以存储大小为300MB的文件为例。

1.Erasure Coding存储文件的示意图

  • 通过Erasure Coding存储的文件由数据和奇偶校验码两部分组成,这两部分存储在不同的Block中。
  • HDFS为了便于查找数据对应的奇偶校验码,会根据Erasure Coding策略将相关联的Block放入到同一数据块组。
    在这里插入图片描述

常用的Erasure Coding策略有RS-10-4-1024k、RS-6-3-1024k 和 RS-3-2-1024k,这3种策略都是通过Reed-Solomon(里德-所罗门)编码实现,又称RS编码,关于这3种策略的介绍如下。

  • RS-10-4-1024k策略中的10表示10个存储条带化单元的Block;4表示4个存储奇偶校验单元的Block;1024K表示条带化单元的大小。整体含义是每生成10个存储条带化单元的Block,便生成4个存储对应奇偶校验单元的Block,并把这14个Block放入到一个数据块组。
  • RS-6-3-1024k策略中的6表示6个存储条带化单元的Block;3表示3个存储奇偶校验单元的Block;1024K表示条带化单元的大小。整体含义是每生成6个存储条带化单元的Block,便生成3个存储对应奇偶校验单元的Block,并把这9个Block放入到一个数据块组,该策略是Erasure Coding默认的策略。
  • RS-3-2-1024k策略中的3表示3个存储条带化单元的Block;2表示2个存储奇偶校验单元的Block;1024K表示条带化单元的大小。整体含义是每生成3个存储条带化单元的Block,便生成2个存储对应奇偶校验单元的Block,并把这5个Block放入到一个数据块组。

在HDFS中,可以通过Admin Commands类型的HDFS Shell子命令ec应用Erasure Coding来存储文件,接下来,介绍子命令ec常用的一些子命令选项。

2.-enablePolicy

子命令选项-enablePolicy用于开启Erasure Coding并指定Erasure Coding策略,语法格式如下。

hdfs ec -enablePolicy -policy <policyName>

  • 参数-policy:用于指定Erasure Coding策略;
  • 参数policyName:用于指定Erasure Coding策略的名称。

开启Erasure Coding并指定Erasure Coding策略为RS-3-2-1024k。

hdfs ec -enablePolicy -policy RS-3-2-1024k

在这里插入图片描述

3.-setPolicy

子命令选项-setPolicy用于在指定目录上设置Erasure Coding策略,语法格式如下。

hdfs ec -setPolicy -path <path> -policy <policyName>

  • 参数-path:用于指定目录。
  • 参数path:用于指定目录名称。

为HDFS的目录/EC指定Erasure Coding策略为RS-3-2-1024k。

hdfs ec -setPolicy -path /EC -policy RS-3-2-1024k
在这里插入图片描述

4.-getPolicy

子命令选项-getPolicy用于查看指定目录上的Erasure Coding策略,语法格式如下。

hdfs ec -getPolicy -path <path>

查看HDFS中目录/EC的Erasure Coding策略

hdfs ec -getPolicy –path /EC
在这里插入图片描述

5.-unsetPolicy

子命令选项-unsetPolicy用于在指定目录上取消Erasure Coding策略,语法格式如下。

hdfs ec -unsetPolicy -path <path>

取消目录/EC的Erasure Coding策略。

hdfs ec -unsetPolicy -path /EC
在这里插入图片描述

6.-disablePolicy

子命令选项-disablePolicy用于关闭Erasure Coding及指定的Erasure Coding策略,语法格式如下。

hdfs ec -disablePolicy -policy <policyName>

关闭Erasure Coding及指定的Erasure Coding策略RS-3-2-1024k。

hdfs ec -disablePolicy -policy RS-3-2-1024k
在这里插入图片描述

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

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

相关文章

shell编程(完结)

shell编程&#xff08;完结&#xff09; 声明&#xff01; 学习视频来自B站up主 ​泷羽sec​​ 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章 笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其…

echarts图表自定义配置(二)——代码封装

下图是初版&#xff0c;火山图的代码。可以看出&#xff0c;里面的变量&#xff0c;逻辑&#xff0c;函数存在冗余&#xff0c;基本上都是改了参数&#xff0c;同样的get和set&#xff0c;去刷新图表&#xff1b;对于往后继续开发十几二十个图表&#xff0c;会很麻烦。因此需要…

《庐山派从入门到...》IDE启动

《庐山派从入门到...》IDE启动 《庐山派从入门到...》IDE启动 IDE&#xff08;Integrated Development Environment&#xff09;&#xff0c;即集成开发环境&#xff0c;是一种软件应用程序&#xff0c;旨在为软件开发人员提供一个全面的工具集合&#xff0c;以便可以更高效地编…

Elasticsearch 集群部署

Elasticsearch 是一个分布式的搜索和分析引擎&#xff0c;广泛应用于日志分析、全文搜索、实时数据分析等场景。它以其高性能、高可用性和易用性而著称。本文档将引导您完成一个基本的 Elasticsearch 集群配置&#xff0c;包括节点间的通信、客户端访问、安全设置等关键步骤。我…

SpringBoot【十一】mybatis-plus实现多数据源配置,开箱即用!

一、前言&#x1f525; 环境说明&#xff1a;Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 正常情况下我们在开发系统的时候都是使用一个数据源&#xff0c;但是由于有些项目同步数据的时候不想造成数据库io消耗压力过大&#xff0c;便会一个项目对应多个数据源…

软考高级架构 —— 10.6 大型网站系统架构演化实例 + 软件架构维护

10.6 大型网站系统架构演化实例 大型网站的技术挑战主要来自于庞大的用户&#xff0c;高并发的访问和海量的数据&#xff0c;主要解决这类问题。 1. 单体架构 特点: 所有资源&#xff08;应用程序、数据库、文件&#xff09;集中在一台服务器上。适用场景: 小型网站&am…

angular图表echarts设置

angular框架ngx-echarts图表的配置 图表高度设置 默认高度是400px 可以自己动态设置容器高度 <div echarts nz-row nzJustify"start" [options]"option" [style.height]"option.echartHeight"></div>option.echartHeight‘600px’…

FastAPI vs Flask 选择最适合您的 Python Web 框架

文章目录 1. 简介2. 安装和设置3. 路由和视图4. 自动文档生成5. 数据验证和序列化6. 性能和异步支持结论 在 Python Web 开发领域&#xff0c;FastAPI 和 Flask 是两个备受欢迎的选择。它们都提供了强大的工具和功能&#xff0c;但是在某些方面有所不同。本文将比较 FastAPI…

[SAP ABAP] DEBUG ABAP程序中的循环语句

在ABAP程序开发中可能会遇到要DEBUG循环语句的情况&#xff0c;这个循环语句可能会执行上万次&#xff0c;但我们希望程序执行循环到100次就停下来&#xff0c;也就是希望DEBUG断点设置在循环语句的第100次停下来观察执行的结果&#xff0c;这时我们可以在DEBUG程序时通过设置一…

服务器部署,用 nginx 部署后页面刷新 404 问题,宝塔面板修改(修改 nginx.conf 配置文件)

如果你的项目使用了 vue&#xff0c;并使用了路由且路由配置为 history 模式&#xff0c;就会出现这种情况。 当你使用 nginx 部署前端项目时&#xff0c;发现页面刷新或不用根目录访问页面时&#xff0c;出现404页面 宝塔面板 解决方法&#xff1a;修改 nginx 配置&#xff…

学习思考:一日三问(思考篇)之路由表

学习思考&#xff1a;一日三问&#xff08;思考篇&#xff09;之路由表 学了什么&#xff08;是什么&#xff09;Destination/Mask&#xff08;最终目标&#xff0c;寻路必须&#xff09;Proto&#xff08;择优可选&#xff09;Pre&#xff08;择优可选&#xff09;Cost&#x…

【Rive】Android与Rive交互

1 Android与Rive交互的常用接口 1.1 RiveAnimationView参数 <app.rive.runtime.kotlin.RiveAnimationViewandroid:id"id/rive_view"android:layout_width"match_parent"android:layout_height"match_parent"android:adjustViewBounds"…

nginx反向代理(负载均衡)

nginx的代理 代理 四层代理 七层代理 正向代理和缓存的配置方式 &#x1f42d;&#x1f42e;&#x1f42f;&#x1f430;&#x1f409;&#x1f40d;&#x1f434;&#x1f411;&#x1f412;&#x1f414;&#x1f436;&#x1f437; 反向代理》负载均衡 负载均衡&#xff…

常见的网络攻击手段

IP 欺骗 IP 是什么? 在网络中&#xff0c;所有的设备都会分配一个地址。这个地址就仿佛小蓝的家地址「多少号多少室」&#xff0c;这个号就是分配给整个子网的&#xff0c;「室」对应的号码即分配给子网中计算机的&#xff0c;这就是网络中的地址。「号」对应的号码为网络号…

使用IP自签名SSL证书

最近需要创建WebSocket服务器并使用SSL证书&#xff0c;由于是内网测试&#xff0c;所以需要使用指定IP的自签SSL证书。 其实笔者前面博文 使用nexus3作为Docker镜像仓库 解决nexus3登录x509: certificate has expired or is not yet valid 中有创建过相应的证书&#xff0c;这…

神经网络权重矩阵初始化:策略与影响

文章目录 一、权重矩阵初始化&#xff1a;神经网络训练的关键起点&#xff08;一&#xff09;初始化的重要性及随机特性&#xff08;二&#xff09;不同初始化方法的探索历程零初始化&#xff1a;简单却致命的选择&#xff08;仅适用于单层网络&#xff09;标准初始化&#xff…

react-dnd 拖拽事件与输入框的文本选中冲突

问题描述 当我们使用拖拽库的时候&#xff0c;往往会遇到拖拽的一个元素他的子孙元素有输入框类型的dom节点&#xff0c;当拖拽的事件绑定在该元素身上时候&#xff0c;发现子孙的输入框不能进行文本选中了&#xff0c;会按住鼠标去选中文本的时候会触发拖拽 实际的效果&…

【构建工具】现代开发的重要角色

你可能有所听闻构建工具&#xff0c;但是不知道是干什么的&#xff0c;或者是开发中用到了&#xff0c;大概会使用&#xff0c;但是想理解一下具体的工作原理等&#xff0c;那么我将分享一下我对其的理解。【 我将分为两篇来讲解】。 当我们谈到构建工具时&#xff0c;可以把它…

【环境搭建】Jeecg-Boot v3.5.0 Docker搭建

前言 最近需要复现JeecgBoot的SQL注入漏洞&#xff0c;必须要搭建JeecgBoot v3.5.0这个版本才行&#xff0c;DockerHub没人push这个版本的&#xff0c;相关博客也比较少&#xff0c;所以自己来搭建&#xff0c;记录一下过程。 前置环境 Ubuntu 20.04Docker version 27.3.1do…

如何通过编译器标志增强移动应用的安全性

作为一名 Android 或 iOS 开发者&#xff0c;您可能已经熟悉一些常见的安全开发最佳实践&#xff0c;比如验证外部输入、合理管理内存以及避免使用弱加密算法。然而&#xff0c;即便是最精心编写的代码&#xff0c;也可能包含一些 bug&#xff0c;其中一些可能会导致可被利用的…