阿里云E-MapReduce节点优雅下线-基于Yarn Node Labels特性

本文涉及的产品
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 背景:阿里云E-MapReduce集群(简称EMR集群)部分节点需要下线迁移,但集群资源常年跑满,诉求是节点下线迁移过程中不影响任一任务执行。本次方案基于Yarn Node Labels的特性进行资源隔离后下线。下期对官网Graceful Decommission of YARN Nodes的方案进行验证,参考:https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/GracefulDecommission.html。

1. 整体思路

YARN Node Labels特性支持将YARN NodeManager节点进行分区管理,通过创建新的exclusive分区,将每次要下线的节点剥离出DEFAULT分区,添加到exclusive分区,不再调度任务上去,待存量任务运行结束后,执行nodemanager和datanode的下线,ecs宿主机迁移,nodemanager和datanode上线,移出exclusive分区作为集群计算资源使用。

参考文档:https://help.aliyun.com/zh/emr/emr-on-ecs/user-guide/node-labels?spm=a2c4g.11186623.0.0.2c3047baKuHtea

2. 操作及验证过程

2.1. 集群环境

EMR版本:EMR-3.44.1(不适用控制台管理yarn分区,详见:https://help.aliyun.com/zh/emr/emr-on-ecs/user-guide/manage-yarn-partitions-in-the-emr-console?spm=a2c4g.11186623.0.0.5b551bc8FQTfVZ

调度器:yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

数据存储位置:oss or hdfs

数据副本数量:dfs.replication=2(如果数据都存在oss,由oss负责数据的高可用,可以忽略这个限制,不然每次最多下线dfs.replication-1台节点,防止点儿背导致某一个block的数据一次性被下掉)

2.2. yarn参数配置

新增配置项:

yarn.node-labels.enabled=true

yarn.node-labels.fs-store.root-dir=/tmp/node-labels

yarn.node-labels.configuration-type=centralized(默认就是这个)

添加后滚动重启yarn resourcemanager适配新的参数

2.3. 创建分区-映射节点

# 登录master节点
ssh root@master-1-1的ip
# 切换yarn默认管理员hadoop账户执行
sudo su hadoop
# 添加DEMO分区 默认为exclusive(见下图)
yarn rmadmin -addToClusterNodeLabels "DEMO"

image.png

yarn ui上验证Node Labels是否添加成功(见下图)

image.png

# 列出所有节点
yarn node -list -all
# 根据要下线节点的ecs id 匹配到节点名称core-x-x 添加到该分区中
# 样例命令如下
# 注意如果复制上面list中的node名不要加端口号 会报找unknown nodes
yarn rmadmin -replaceLabelsOnNode "core-1-1.集群id.cn-beijing.emr.aliyuncs.com=DEMO" -failOnUnknownNodes

yarn ui上可以验证Nodes及其Node Labels(见下图1)

在Node Labels页签下可以看到“DEMO”的Label下active的 NMs数量已经从0变为1

image.pngimage.png

配置分区容量及默认分区:

  1. 根据文档需要在EMR管控台上配置capacity-scheduler.xml,主要是用来配置队列在label分区的容量,默认提交分区等配置。
  2. 因为我们配置DEMO分区主要是分配要下线的节点,且分区为exclusive的模式,不会让任务调度上去,验证了下不做配置也可以。配置的话 yarn.scheduler.capacity.root.default.default-node-label-expression 千万不能配置到DEMO,不然会有任务发上去。

image.png

2.4. 下线节点

EMR控制台:

  1. Yarn nodamanager 下线
  2. HDFS datanode 停止

2.5. ECS迁移

ECS迁移

2.6. 添加节点

EMR控制台:

  1. HDFS datanode启动
  2. Yarn nodemanager recommission

2.7. 节点移出分区

# ssh登录master节点
yarn rmadmin -replaceLabelsOnNode "core-1-1.c-75d9260b2816cfbe.cn-beijing.emr.aliyuncs.com=" -failOnUnknownNodes
# 观察该节点在yarn ui上的label是否为空(DEFAULT)
# 观察一段时间后yarn ui上该节点是否有container 运行(有任务发到该节点)

3. 验证运行中的任务

验证1:节点手动切换到DEMO分区上面的任务是否会failed

将某个节点从DEFAULT分区修改为DEMO分区时,如果该节点上在DEFAULT分区中还有正在RUNNING的任务,切换节点到DEMO分区:

  1. 窗口1执行(提交到default分区)
# 在map=100 reduce=0时候  (大约使用16核资源)
hadoop jar hadoop-mapreduce-examples-2.8.5.jar wordcount /tmp/input /tmp/output18
  1. 窗口2 执行
# (将节点core-1-2剥离default分区)
yarn rmadmin -replaceLabelsOnNode "core-1-2.集群id.cn-beijing.emr.aliyuncs.com=DEMO" -failOnUnknownNodes
  1. yarn队列上可以观察到 default分区 over capacity 。demo分区有使用
  2. wordcount任务执行成功

image.png

验证2:wordcount运行时间整体较小,约10分钟,所以用mr的sleep进行了2次验证,看节点被移动到DEMO分区任务是否会failed

  1. 执行sleep mr任务
hadoop jar hadoop-mapreduce-client-jobclient-2.8.5-tests.jar sleep -m 10 -r 10 -mt 1000 -rt 15000000
  1. 任务跑满(93%)DEFAULT队列时进行节点分区切换
yarn rmadmin -replaceLabelsOnNode "core-1-2.c-75d9260b2816cfbe.cn-beijing.emr.aliyuncs.com=DEMO" -failOnUnknownNodes 
# (将节点core-1-2剥离default分区),也出现over capacity的情况
  1. 第二天观察任务没有failed,还在running,DEMO分区没有资源占用,执行了约12小时,可以验证执行的任务不会短时间内(1小时)被驱逐致使任务failed

image.png

相关实践学习
基于EMR Serverless StarRocks一键玩转世界杯
基于StarRocks构建极速统一OLAP平台
快速掌握阿里云 E-MapReduce
E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、HBase,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。 本课程主要介绍阿里云 E-MapReduce 的使用方法。
相关文章
|
3月前
|
资源调度 JavaScript Linux
nvm, node.js, npm, yarn 安装配置
nvm, node.js, npm, yarn 安装配置
178 1
|
1天前
|
资源调度 运维 Devops
阿里云云效操作报错合集之yarn install时报错,是什么导致的
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
11天前
|
缓存 资源调度 JavaScript
Nodejs 命令行调用 exec 与 spawn 差异--- 解决 spawn yarn ENOENT error
Nodejs 命令行调用 exec 与 spawn 差异--- 解决 spawn yarn ENOENT error
|
2月前
|
敏捷开发 缓存 测试技术
阿里云云效产品使用问题之构建Vue3项目,怎么让node_modules缓存下来
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2月前
|
分布式计算 资源调度 数据处理
YARN支持哪些非基于MapReduce的计算模型?
【6月更文挑战第19天】YARN支持哪些非基于MapReduce的计算模型?
44 11
|
9月前
|
资源调度 JavaScript
yarn错误The engine “node“ is incompatible with this module
yarn错误The engine “node“ is incompatible with this module
174 0
|
1月前
|
移动开发 运维 JavaScript
阿里云云效操作报错合集之遇到Node.js的内存溢出问题,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
1月前
|
JavaScript Shell 应用服务中间件
阿里云云效操作报错合集之Node.js构建报错,该如何排查问题
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
1月前
|
资源调度 前端开发 开发工具
阿里云云效操作报错合集之Node-Sass模块在构建过程中,出现报错"ENOENT: no such file or directory, scandir ",该如何处理
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
1月前
|
JavaScript IDE 持续交付
阿里云云效产品使用合集之如何配置 Node.js构建任务让其在Windows环境中进行
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。

相关产品

  • 开源大数据平台 E-MapReduce