Federation HDFS VS HDFS

news/2024/5/20 2:22:04 标签: HDFS

序言

主要是为了解决HDFS如何把NameNode升级为多个,之前只能部署一个NameNode加一个配合的计算节点 secondaryNameNode,注意secondaryNameNode 并不是主备模式的节点,而是用于协助NameNode做某些计算的节点,以提升吞吐量.cuiyaonan2000@163.com

如下内容来自于:

  • https://zhuanlan.zhihu.com/p/332615557

单个Namenode的HDFS架构的局限性

Namespace(命名空间)的限制

由于Namenode在内存中存储所有的元数据(metadata),因此单个Namenode所能存储 的对象(文件+块)数目受到Namenode所在JVM的heap size的限制。例如,在NameNode的配置文件中配置JVM 的heap size 的-Xmx为50G的话,大概能够存储20亿(200 million)个对象。

性能的瓶颈

由于是单个Namenode的HDFS架构(这里一定和HA区别开来),因此整个HDFS文件系统的吞吐量受限于单个Namenode的吞吐量,在NameNode很繁忙的时候,打一下管理命令都可能报错。比如:hdfs fsck / 这种耗时较长,需要大量访问NameNode的命令。

隔离问题

如果HDFS仅有一个Namenode,无法隔离各个用户的应用,因此,假如在HDFS上运行的一个未充分测试的程序很有可能影响到(减慢)生产环境HDFS上运行的程序。那么在HDFS Federation中,可以用不同的Namespace来隔离不同的用户应用程序,使得不同Namespace Volume中的程序相互不影响。

集群的可用性

在只有一个Namenode的HDFS中,此Namenode的宕机无疑会导致整个集群不可用,当然这里有HA的集群不在这个范围中。

需要注意的,HDFS Federation并不能解决单点故障问题,也就是说,每个NameNode都存在在单点故障问题,你需要为每个namenode部署一个backup namenode以应对NameNode挂掉对业务产生的影响。-------------并不能提供高可用性cuiyaonan2000@163.com

为什么纵向扩展目前的Namenode不可行?

比如将Namenode的Heap空间扩大10倍,由原来的50G增大到500GB,这样纵向扩展带来的:

  1. 第一个问题就是启动问题,启动花费的时间太长。因为,启动的过程中读的fsimage和editlog,当内存设置到500G时,你的fsimage会非常大。配置50GB Heap size时,Namenode的HDFS启动一次大概需要半个小时,甚至更久,那500GB的需要多久? 这个不是线性的扩大10倍的问题,即使线性扩大10倍,那也不是客户所能接受的。

  1. 第二个潜在的问题就是Namenode在Full GC时,如果发生错误将会导致整个集群宕机,Full GC 的时间会变得很长,长的超过集群大部分的超时时间。

  1. 第三个问题是对大JVM Heap进行调试比较困难。优化Namenode的内存使用性价比比较低

为什么要引入Federation

Federation中文意思为联邦,联盟,是NameNode的Federation,也就是会有多个NameNode。

Federation能够快速的解决了大部分单Namenode HDFS的问题。

Federation 整个核心设计实现大概用了3.5个月。大部分改变是在Datanode、Config和Tools,而Namenode本身的改动非常少,这样Namenode原先的鲁棒性不会受到影响。

Federation良好的向后兼容性,已有的单Namenode的部署配置不需要任何改变就可以继续工作。

HDFS的Federation机制

HDFS Federation使用了多个独立的Namenode/namespace来使得HDFS的命名服务能够水平扩展。在HDFS Federation中的Namenode之间是联盟关系,他们之间相互独立且不需要相互协调HDFS Federation中的Namenode提供了命名空间和块管理功能HDFS Federation中的datanode被所有的Namenode用作公共存储块的地方。

每一个datanode都会向所在集群中所有的Namenode注册,并且会周期性的发送心跳和块信息报告,同时处理来自Namenode的指令。

HDFS的两大两大模块得先了解下

Namespace

包括目录、文件和块,它支持所有命名空间相关的文件操作,如创建、删除、修改,查看所有文件和目录。

Block Storage Service(块存储服务)包括两部分

在namenode中的块的管理:

提供datanode集群的注册、心跳检测等功能。

处理块的报告信息和维护块的位置信息。

支持块相关的操作,如创建、删除、修改、获取块的位置信息。

管理块的冗余信息、创建副本、删除多余的副本等。

存储:datanode提供本地文件系统上块的存储、读写、访问等。

Federation HDFS与当前HDFS的比较及改进

架构的变化

单NameNode架构中,HDFS只有一个命名空间(Namespace),它使用全部的块。而Federation HDFS中有多个独立的命名空间(Namespace),并且每一个命名空间使用一个块池(block pool)。

单NameNode架构中,HDFS中只有一组块,而Federation HDFS中有多组独立的块。块池(block pool)就是属于同一个命名空间的一组块。

单NameNode架构中,HDFS由一个Namenode和一组datanode组成。而Federation HDFS由多个Namenode和一组datanode,每一个datanode会为多个块池(block pool)存储块。

Namenode

namenode直接相互独立,各自分工管理自己的区域,且不需要互相协调,一个namenode挂掉了不会影响其他的namenode。

Block Pool(块池)

所谓Block pool(块池)就是属于单个命名空间的一组block(块)。每一个datanode为所有的block pool存储块

Datanode是一个物理概念,而block pool是一个重新将block划分的逻辑概念。

同一个datanode中可以存着属于多个block pool的多个块。Block pool允许一个命名空间在不通知其他命名空间的情况下为一个新的block创建Block ID。

一个Namenode挂掉后不会影响其下的datanode为其他Namenode的服务。 当datanode与Namenode建立联系并开始会话后自动建立Block pool。每个block都有一个唯一的标识, 这个标识我们称之为扩展的块ID(Extended Block ID)= BlockID+BlockID。这个扩展的块ID在HDFS集群之间都是唯一的,这为以后集群归并创造了条件。

Datanode中的数据结构都通过块池ID(BlockPoolID)索引,即datanode中的BlockMap,storage等都通过BPID索引。在HDFS中,所有的更新、回滚都是以Namenode和BlockPool为单元发生的。即同一HDFS Federation中不同的Namenode/BlockPool之间没有什么关系。

Datanode的改进

在datanode中,对应于每个Namnode都有相应的线程。每个datanode会去每一个Namenode注册,并且周期性的给所有的Namenode发送心跳及datanode的使用报告。

Datanode还会给Namenode发送其所在的block pool的block report(块报告)。由于有多个Namenode同时存在,因此任何一个Namenode都可以随时动态加入、删除和更新。

Federation中的其他方面的改进

提供了工具,对于Namenode的初始化和退役的监控和管理。 允许在datanode级别或者block pool级别的负载均衡。 Datanode的后台守护进程,为Federation所做的磁盘和目录扫描。 提供了显示Namenode的Block pool的使用状态的Web UI。 还提供了对全部集群存储使用状态的UI展示。 在Web UI中列出了所有的Namenode及其细节,如Namenode-BlockPoolID和存储的使用状态,失去联系的、活的和死的块信息。还有前往各个Namenode Web UI的链接。 Datanode退役状态的展示。

多命名空间的管理问题

在一个集群中需要唯一的命名空间还是多个命名空间,核心问题是命名空间中数据的共享和访问的问题。使用全局唯一的命名空间是解决数据共享和访问的一种方法。在多命名空间下,可以使用Client Side Mount Table方式做到数据共享和访问,而Client Side Mount Table 则是通过新的文件系统viewfs实现的。----------多个命名空间下的 数据共享,比如我们的Java应用通过连接一个namespace,来获取所有的数据cuiyaonan2000@163.com

Namespace Volume(命名空间卷=Namespace+Block Pool)

一个Namespace和它的Block Pool合在一起称作Namespace Volume。Namespace Volume是一个独立完整的管理单元。当一个Namenode/Namespace被删除,与之相对应的Block Pool也也被删除。在升级时每一个Namespace Volume也会整体作为一个单元。

ClusterID

HDFS Federation中添加了Cluster ID用来区分集群中的每个节点。当格式化一个Namenode时,这个ClusterID会自动生成或者手动提供。在格式化同一集群中其他Namenode时会用到这个ClusterID。

HDFS Federation对老版本的HDFS是兼容的

这种兼容性可以使得已有的Namenode配置不需要任何改变继续工作。

平衡的配置有针对blockpool的选项了

Balancer 已经被用来改变集群中多个NameNode的的平衡。可以运行下面的命令:

hdfs start balancer [-policy <policy>]

http://www.niftyadmin.cn/n/181395.html

相关文章

SQL Server底层架构技术对比

背景 数据库是信息化的基石&#xff0c;支撑着整个业务系统&#xff0c;发挥着非常重要的作用&#xff0c;被喻为“IT的心脏”。因此&#xff0c;让数据库安全、稳定、高效地运行已经成为IT管理者必须要面对的问题。数据库在底层架构层面需要满足以下几点建设要求&#xff1a; …

es_MySQL、HBase、ElasticSearch三者对比详解

1、概念介绍 MySQL&#xff1a;关系型数据库&#xff0c;主要面向OLTP&#xff08;OLTP&#xff0c;也叫联机事务处理(Online Transaction Processing)&#xff09;&#xff0c;支持事务&#xff0c;支持二级索引&#xff0c;支持sql&#xff0c;支持主从、Group Replication&a…

SpringBoot技术快速入门

目录 Spring Boot是什么 Spring Boot 的特点 配置开发环境 创建 Spring Boot 项目 Maven 创建Spring Boot 项目 Spring Initializr 创建SpringBoot项目 启动 Spring Boot Spring Boot starter入门 SpringBoot基本设置 6.1SpringBoot设置端口号 6.2SpringBoot设置项目…

代码随想录算法训练营第五十五天|392.判断子序列、115.不同的子序列

​ LeetCode 392 判断子序列 题目链接&#xff1a;https://leetcode.cn/problems/is-subsequence/ 思路&#xff1a; dp数组的含义 dp[i][j]代表以i-1结尾的s子串和以j-1结尾的t子串&#xff0c;相同子序列的长度 递推公式 本题有两种情况&#xff1a; 1、s[i - 1] t[j - …

Vector - CAPL - 等待并获取LIN数据(续)

继续上篇&#xff01;&#xff01;&#xff01; ***摸鱼聊天、答疑解惑首选之地 --- 车载网络哪些事儿*** 目录 TestWaitForLinReceiveError TestGetWaitLinReceiveErrData 代码示例 TestWaitForLinWakeupFrame TestGetWaitLinWakeupData 代码示例 TestWaitForLinTransm…

重载运算与类型转换Ⅰ

第十四章&#xff1a;重载运算与类型转换Ⅰ 1、基本概念&#xff1a; 重载的运算符是就有特殊名字的函数&#xff1a;名字由关键字operator和要定义的运算符号共同组成。也包含返回类型&#xff0c;参数列表以及函数体。 参数数量与运算符作用的运算对象数量一样多。 重载的…

工程师职称的专业分类

工程师是职业水平评定(职称评定)的一种。其下&#xff0c;有技术员&#xff0c;助理工程师等职称;其上有高级工程师&#xff0c;研究员或教授级高级工程师等职称。当然&#xff0c;这也只是对从事工程建设或管理人员技术水平的一种标定而已。 按职称( 高低&#xff0c;分为&…

Vue3级联选择(Cascader)

Vue2级联选择 以Vue3选择器为基础实现的级联选择组件 可自定义设置以下属性&#xff1a; 可选项数据源&#xff08;options&#xff09;&#xff0c;类型&#xff1a;Array<any>&#xff0c;默认 [] &#xff08;v-model&#xff09;级联选中项&#xff08;selectedV…