Hadoop2.X大数据集群规划与架构设计

2024-06-03 10:48

本文主要是介绍Hadoop2.X大数据集群规划与架构设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Hadoop2.X大数据集群规划与架构设计

第一阶段:先说说伪分布式

不管是HDFS和YARN,在我们之前的文章中已经说过关于伪分布式的部署和安装。也就是我们把HDFS的两个节点NameNode和DataNode,YARN的ResourceManger和NodeManager都放在同一个机器上。

机器1:bigdata-senior01.kfk.com

进程包括:

  • NameNode

  • DataNode

  • ResourceManager

  • NodeManager

第二阶段:Hadoop分布式初级设计

既然是分布式,我们说分布式是主从架构,也就是说至少要一个主节点,多个从节点吧。所以不管是HDFS或者YARN,对于DataNode节点和NodeManager节点必须是多台,最少也要是3台。我们自己玩,机器资源不富裕的情况下,搞个3台机器没有问题,效果一样能达到。所以,接下来我们做一个分布式集群机器的规划设计。

  • 机器规划

机器1:bigdata-senior01.kfk.com

进程包括:

  1. NameNode

  2. DataNode

  3. NodeManager

机器2:bigdata-senior02.kfk.com

进程包括:

  1. ResouceManager

  2. NodeManger

  3. DataNode

机器3:bigdata-senior03.kfk.com

进程包括:

  1. DataNode

  2. NodeManager

  3. SecondaryNameNode

首先我们保证每天机器上分别有一个DataNode节点和NodeManager节点。因为都是从节点,真正干活的。在数量上我们要保证。那么NameNode和ResourceManager是两个非常重要的管理者,在我们架构设计的时候,尽可能的把它们分开,不要放在一台机器上。我们客户端的请求,第一时间与NameNode和ResourceManager打交道。NameNode负责管理HDFS文件系统的元数据,客户端不管是读文件还是写文件,都要首先找到NameNode获取文件的元数据,再进行文件的操作。ResourceManager也是如此,它负责管理集群中的资源和任务调度,你也可以把它视为“大数据操作系统”。客户端能否提交应用并运行,就看你的ResourceManager是否正常。

Hadoop2.X大数据集群规划与架构设计

  • SecondaryNameNode的作用

还有一个进程,就是下图中的SecondaryNameNode,它是干什么的呢。我们可以这么来理解,比如NameNode就好比是我们一本书的目录,它就像一本书内容的管理员,当用户需要看书的时候,他可以告诉用户这个书的标题是什么,内容在哪一页,用户通过书的目录直奔某一页的内容。假如有一天,这个书的内容发生了变化,增加了好多内容,前天张三加了内容,昨天王四加了内容,今天李二加了内容,如果这个书的内容在不断的变化,那我的目录是不是要变化?这是一定的。如果你的书目录与书的内容同步,那这个书就没有意义了,对于用户来说,不会看你这本书。我们只是举个例子,当然现实中不可能存在,除非是电子WORD文档,还是有这个场景的。

其实中这个例子中我们可以看出,如果书的内容要与目录同步,我们必须要不停的跟进修改内容的日志信息来重新改编我们的书目录,也就是只要书的内容变化了,我们就要对书的目录做一个合并,永远保证与内容同步一致。那么SecondaryNameNode这个进程做的工作就如同根据书的内容不停的重新合并书目录一样,在HDFS文件系统中,它会根据用户对文件的操作日志,来合并NameNode中文件元数据,永远保证元数据与DataNode节点上存储的文件信息一致。

  • 分布式机器规划图:

Hadoop2.X大数据集群规划与架构设计

第三阶段:HDFS的HA的架构

HDFS HA初步架构图:

Hadoop2.X大数据集群规划与架构设计

  • 为什么要HA

从我们上一步的集群设计规划中可以看出,我们只有一个NameNode节点。我们说NameNode的节点是非常重要的,如果只有一个NameNode并且出现故障,那整个HDFS集群将无法使用,直到NameNode重新启动。那我们是否可以考虑部署两个NameNode节点呢?从现实意义上来说,这是必须的。这也就是我们要说的HDFS的HA设计。

NameNode主要在以下两个方面影响HDFS集群:

  • NameNode集群发生意外,如宕机,集群将无法使用,直到管理员重启

  • NameNode机器需要升级,包括软件、硬件升级,此时集群将无法使用

其实在Hadoop2.0之前,在HDFS集群中NameNode是存在单点故障的。

Hadoop2.X大数据集群规划与架构设计

  • HA的重要性

那么什么是HDFS的HA呢,也就是说HA的功能通过配置Active/Standby两个NameNodes来解决在集群中NameNode单点故障的问题。如果对外提供服务的Active节点出现故障或者需要升级,这时我们可以通过HA将NameNode很快的切换到另一台机器上,继续对外服务。从而达到HDFS的高可用性。

HA的架构设计中,我们设计了两台NameNode节点。当然对于客户端访问来说,我们也是需要做一个代理的。为什么要代理?对于客户端访问来说,HDFS是透明的,你有多少台NameNode节点,客户端并不关心,你HDFS只要保证一点,能让我正常访问HDFS系统就OK。但对于HDFS系统来说,两个NameNode,你得选择哪个提供给客户端访问,所以必须要有代理机制。也就是在NameNode的上层必须要有一个代理层。那这个代理层就需要我们之前说的协同服务框架Zookeeper来做。

基于上面的架构图,我们来思考一个问题:

  • 如何保证edit日志文件的安全和完整

我们两个NameNode节点,如果Active节点宕机,我Standby节点要接着继续对服务,那么这个正常对外服务源自与文件元数据的完整性,也就是说Active节点要实时非常安全、完整的记录文件的操作日志信息,这样Standby在读取的时候,读取的日志信息是完整的,当Active节点宕机,Standby才能接手继续工作。

  • 方案一:一个好的文件系统

找一台比较好的服务器,作为外部的文件存储设备,Active节点的NameNode将edit日志文件写入,Standby节点的NameNode将读取写入的日志文件。那么这种方案需要好的企业级服务。成本上来说代价昂贵,与我们小成本、大集群的分布式理念相违背。

Hadoop2.X大数据集群规划与架构设计

  • 方案二:分布式存储日志信息QJM

NameNode管理文件的元数据,包括fsimage和edits,在开始启动的时候NameNode的Active节点和Standby节点元数据是一样的。但是启动之后,Active节点提供对外服务,那么它的edits日志文件在不停的变化,这个时候两个NameNode节点上的日志文件肯定是不一样的。那么就需要一种机制,保证Active节点的日志安全的写入某个地方,并且让Standby节点能完整的读取。

我们说HDFS文件的安全性和完整性是通过DataNode节点副本的方式来保证的,每一个文件的存储默认至少是3份。那么我们的edit日志文件为了保证安全性,也类似于DataNode文件的存储方式,以2n+1副本的方式进行存储。n表示允许损坏的机器节点数量。也就是说Active的NameNode节点将edit日志存三份,允许其中一个节点写入edit日志失败。那么负责存储edit日志文件节点进程是谁呢?就是JournalNode。它的节点数必须是奇数。JournalNode负责管理edit日志文件的安全性和完整性,从而达到NameNode的Active节点与Standby节点之间元数据的同步。

“use HDFS HA using the Quorum Journal Manager (QJM) to share edit logs between the Active and Standby NameNodes“这是官网的一句话。QJM,分布式的日志管理,节点名称就是JournalNode。

  • 方案三:使用ZooKeeper进行数据存储

edits文件数据量不是很大,所以我们也可以采用ZooKeeper进行存储。

那么一般架构设计中,还是采用QJM分布式日志存储来达到两个NameNode节点之间元数据的同步。

  • QJM的架构图

Hadoop2.X大数据集群规划与架构设计

不管是Active节点还是Standby节点,每个DataNode服务必须报告自己的块信息。

  • 最终的HDFS的HA架构图

Hadoop2.X大数据集群规划与架构设计

  • HDFS的HA机器规划图

Hadoop2.X大数据集群规划与架构设计

从上图中我们可以看出,SecondaryNameNode进程规划消失了,为什么呢?因为我们用了QJM,也就是说JournalNode进程的出现,SecondaryNameNode就没有必要再使用,因为edits日志的合并QJM已经做了。

一下说明来自官方:

Note that, in an HA cluster, the Standby NameNode also performs checkpoints of the namespace state, and thus it is not necessary to run a Secondary NameNode, CheckpointNode, or BackupNode in an HA cluster. In fact, to do so would be an error. This also allows one who is reconfiguring a non-HA-enabled HDFS cluster to be HA-enabled to reuse the hardware which they had previously dedicated to the Secondary NameNode。

第四阶段:HDFS故障自动转移

两个NameNode,我们需要自动切换故障转移,那么我们需要借助HDFS的ZKFC进程,这个进程是给予ZooKeeper的。首先我们需要配置好ZooKeeper。

Hadoop2.X大数据集群规划与架构设计

这个配置很简单,大家可以参考Hadoop官网的HDFS High Availability Using the Quorum Journal Manager这篇文章。

  • HDFS故障切换机器规划图:

Hadoop2.X大数据集群规划与架构设计

第五阶段:YARN的HA

其实YARN的HA配置比HDFS要简单的多,YARN的HA只是基于ZooKeeper来配置它的高可用性。在Hadoop2.4版本之前是单节点故障。

YARN HA的架构图:

Hadoop2.X大数据集群规划与架构设计

我们说故障转移,是不是跟HDFS一样需要有个ZKFC的进程呢,其实它是有的。只不过RM中的ZKFC是以线程的方式存在于RM的进程中。所以,在配置故障转移的时候,我们不需要像HDFS一样单独去启动一个ZKFC进程。

Hadoop2.X大数据集群规划与架构设计

这篇关于Hadoop2.X大数据集群规划与架构设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026777

相关文章

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

Spring Validation中9个数据校验工具使用指南

《SpringValidation中9个数据校验工具使用指南》SpringValidation作为Spring生态系统的重要组成部分,提供了一套强大而灵活的数据校验机制,本文给大家介绍了Spring... 目录1. Bean Validation基础注解常用注解示例在控制器中应用2. 自定义约束验证器定义自

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel

Redis高可用-主从复制、哨兵模式与集群模式详解

《Redis高可用-主从复制、哨兵模式与集群模式详解》:本文主要介绍Redis高可用-主从复制、哨兵模式与集群模式的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Redis高可用-主从复制、哨兵模式与集群模式概要一、主从复制(Master-Slave Repli

SQL常用操作精华之复制表、跨库查询、删除重复数据

《SQL常用操作精华之复制表、跨库查询、删除重复数据》:本文主要介绍SQL常用操作精华之复制表、跨库查询、删除重复数据,这些SQL操作涵盖了数据库开发中最常用的技术点,包括表操作、数据查询、数据管... 目录SQL常用操作精华总结表结构与数据操作高级查询技巧SQL常用操作精华总结表结构与数据操作复制表结

Redis中的数据一致性问题以及解决方案

《Redis中的数据一致性问题以及解决方案》:本文主要介绍Redis中的数据一致性问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Redis 数据一致性问题的产生1. 单节点环境的一致性问题2. 网络分区和宕机3. 并发写入导致的脏数据4. 持

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格