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

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi