Hadoop 怎么委任和解除节点?

news/2024/5/20 2:31:37 标签: hadoop, 大数据, hdfs

前言

本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见大数据技术体系


正文

在这里插入图片描述

Hadoop 集群的管理员经常需要向集群中添加节点,或从集群中移除节点。

例如,为了扩大存储容量,需要委任节点。

相反的,如果想要缩小集群规模,则需解除节点。

如果某些节点表现反常,例如故障率过高或性能过于低下,则需要解除该节点。

通常情况下,节点同时运行 DataNode 和 NodeManager,因而两者一般同时被委任或解除。


1.委任新节点

委任一个新节点非常简单。

  • 首先,配置 hdfs-site.xml 文件,指向 NameNode;
  • 其次,配置 yarn-site.xml 文件,指向 ResourceManager;
  • 最后,启动 DataNode 和 ResourceManager 守护进程。

然而,预先指定一些经过审核的节点以从中挑选新节点仍不失为一种好的方法。

随便允许一台机器以 DataNode 身份连接到 NameNode 是不安全的,因为该机器很可能会访问未授权的数据。

此外,这种机器并非真正的 DataNode, 不在集群的控制之下,随时可能停止,导致潜在的数据丟失。

由于错误配置的可能性,即使这些机器都在本机构的防火墙之内,这种做法的风险也很高。

因此所有工作集群上的 DataNode( 以及NodeManager)都应该被明确管理。

允许连接到 NameNode 的所有 DataNode 放在一个文件中,文件名称由 dfs.hosts 属性指定。

该文件放在 NameNode 的本地文件系统中,每行对应一个 DataNode 的网络地址(由 DataNode 报告——可以通过 NameNode 的网页查看)。

如果需要为一个 DataNode 指定多个网络地址,可将多个网络地址放在一行,由空格隔开。

类似的,可能连接到 ResourceManager 的各个 NodeManager 也在同一个文件中指定(该文件的名称由 yarn.resourcemanager.nodes.inclade-path 属性指定。
在通常情况下,由于集群中的节点同时运行 DataNode 和 NodeManager 守护进程,dfs.hostsyarn.resourcemanager.nodes.include-path 会同时指向一个文件,即include 文件。

向集群添加新节点的步骤如下

在这里插入图片描述

  1. 将新节点的网络地址添加到 include 文件中。
  2. 运行以下指令,将审核过的一系列 DataNode 集合更新至 NameNode 信息:
% hdfs dfsadmin -refreshNodes 
  1. 运行以下指令,将审核过的一系列 NodeManager信息更新至 ResourceManager:
% yarn rmadmin -refreshNodes
  1. 以新节点更新 slaves 文件。这样的话,Hadoop控制脚本会将新节点包括在未来操作之中。
  2. 启动新的 DataNode 和 NodeManager。
  3. 检查新的 DataNode 和 NodeManager是否都出现在网页界面中。

HDFS 不会自动将块从旧的 DataNode 移到新的 DataNode 以平衡集群。用户需要自行运行均衡器。

可以参考我的这篇博客——《一篇文章搞懂HDFS的数据负载均衡策略》


2.解除旧节点

HDFS 能够容忍 DataNode 故障,但这并不意味着允许随意终止 DataNode。

以三复本策略为例,如果同时关闭不同机架上的三个 DataNode, 则数据丢失的概率会非常高。

正确的方法是,用户将拟退出的若干 DataNode 告知 NameNode, Hadoop 系统就可在这些DataNode 停机之前将块复制到其他DataNode。

有了 NodeManager的支持,Hadoop 对故障的容忍度更高。

如果关闭一个正在运行 MapReduce 任务的 NodeManager,application master 会检测到故障, 并在其他节点上重新调度任务。

解除节点的过程由 exclude 文件控制。

对于HDFS 来说,文件由dfs.
hosts.exclude
属性设置;

对于 YARN 来说,文件由 yarn.resourcemanager.
nodes.exclude-path
属性设置。

这些文件列出若干未被允许连接到集群的节点。

通常,这两个属性指向同一个文件。

判断一个 NodeManager能否连接到 ResourceManager非常简单。

仅当 NodeManager出现在 exclude 文件且不出现在 exclude 文件中时,才能够连接到 ResourceManager。

注意,如果未指定 include 文件,或 exclude 文件为空,则意味着所有节点都包含在 exclude 文件中。

HDFS 的规则稍有不同。

如果一个 DataNode 同时出现在 include 和 exclude 文件中,则该节点可以连接,但是很快会被解除委任。

与 NodeManager类似,如果未指定 include 文件或 include 文件为空,都意味着包含所有节点。

从集群中移除节点的步骤如下

在这里插入图片描述

  1. 将待解除节点的网络地址添加到 exclude 文件中,不更新 include 文件。
  2. 执行以下指令,使用一组新的审核过的 DataNode 来更新 NameNode 设置:
% hdfs dfsadmin -refreshNodes 
  1. 使用一组新的审核过的 NodeManager来更新 ResourceManager设置:
% yarn rmadmin -refreshNodes
  1. 转到网页界面,查看待解除 dataNode 的管理状态是否已经变为“正在解除” (Decommission In Progress),因为此时相关的 DataNode 正在被解除过程之中。这些 DataNode 会把它们的块复制到其他 DataNode 中。
  2. 当所有 DataNode 的状态变为 “解除完毕” (Decommissioned)时,表明所有块都己经复制完毕。关闭已经解除的节点。
  3. 从 include 文件中移除这些节点,并运行以下命令:
% hdfs dfsadmin -refreshNodes 
% yarn rmadmin -refreshNodes
  1. 从slaves 文件中移除节点。

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

相关文章

【多线程】happens-before规则

目录 一、是什么二、有哪些三、代码示例3.1 线程解锁对象o之前对变量v的写,对后面对对象o加锁的其它线程对该变量v的读可见3.1.1 不加synchronized锁3.1.2 加synchronized锁 3.2 线程对volatitle变量的写,对接下来其它线程对该变量的读可见3.2.1 不加vol…

Sui与F1甲骨文红牛车队达成合作

在近期达成的一项为期多年的合作协议中,甲骨文红牛车队将利用Sui网络开发,为粉丝带来全新的数字化体验。 甲骨文红牛车队的粉丝将很快在Sui网络上体验到他们最爱的一级方程式车队带来的激情。最近几个赛季一直统治着F1赛场的甲骨文红牛车队,与…

Java异常, 性能有多差

在 Java 中,异常通常被认为是成本昂贵的,不应该用于控制控制。本文将证明这个观点的正确性,并验证导致性能问题的原因。 ​ Java微基准测试框架 在编写代码评估Java异常的性能成本之前,我们需要搭建一个基准测试环境。 测量异…

JS的symbol数据类型

JS的symbol数据类型 1.什么是symbol Symbol是ES6中新增的一种数据类型, 被划分到了基本数据类型中 2.Symbol的作用 用来表示一个独一无二的值 let xxxSymbol(‘标识字符串’);3.为什么需要Symbol? 为了避免第三方框架的同名属性被覆盖 在企业开发中如果需要对一些第三方…

Vue3 Vite4 ElementPlus TS模板(含Vue-Router4+Pinia4)

引言 手动安装配置Vue3 ElementPlus模板比较繁琐,网上寻找一些模板不太符合自己预期,因此花点精力搭建一个符合自己需求的架子 采用最新的组件,版本如下: vite 4.3.9vite-plugin-mock 2.9.8vue 3.3.4pinia 2.1.3vue-router 4.2.2…

Android系统的Ashmem匿名共享内存子系统分析(3)- Ashmem子系统的 C/C++访问接口

声明 其实对于Android系统的Ashmem匿名共享内存系统早就有分析的想法,记得2019年6、7月份Mr.Deng离职期间约定一起对其进行研究的,但因为我个人问题没能实施这个计划,留下些许遗憾…文中参考了很多书籍及博客内容,可能涉及的比较…

宝塔配置MySQL队列调度 | ModStart

执行以下操作前提前进入网站根目录,如 cd /www/wwwroot/xxx.com执行 artisan 命令前请参照 开发教程 → 开发使用常见问题 → 如何运行 /www/server/php/xxx/bin/php artisan xxx 命令 ① 生成数据库队列表迁移文件 在执行该步骤前,请先检查迁移文件 da…

常用的 SQL Server 关键字及其含义

SQL Server 是一种关系型数据库管理系统(RDBMS),提供了用于管理和操作数据库的各种关键字。 以下是一些常用的 SQL Server 关键字及其含义: 1. SELECT: 用于从数据库中检索数据。 2. INSERT: 用于将新记录插入到数据库表中。 3…