文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Hadoop YARN Cgroups 资源隔离讲解,你学会了吗?

2024-11-30 03:29

关注

以下是 Hadoop YARN Cgroups 的主要讲解:

  1. 资源隔离和管理:Cgroups 允许将进程组织成层次结构,每个层次结构都可以分配特定的资源配额。在 Hadoop YARN 中,每个应用程序或容器都可以被放置在一个独立的 Cgroup 中,以确保资源隔离和管理。
  2. 支持的资源:YARN Cgroups 主要用于限制和管理以下资源:

CPU: 限制每个容器可以使用的 CPU 资源。

内存: 限制每个容器可以使用的内存资源。

磁盘 I/O: 限制每个容器可以使用的磁盘 I/O 资源。

  1. Cgroups 配置:在 YARN 中,Cgroups 的配置信息通常在 yarn-site.xml 文件中指定。配置项包括:
  1. Cgroups 的使用场景:

  1. YARN 中的 Cgroups 实现:YARN 使用 Linux Container Executor(LCE)来实现容器的隔离和资源管理。LCE 负责为每个容器创建 Cgroup 并进行资源的配置。

  2. 注意事项和配置建议:

官方文档:https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/NodeManagerCgroups.html

图片

二、Hadoop 环境准备

可以选择物理部署,如果只是测试的话,也可以选择容器部署,这里为了快速测试就选择容器部署了。物理部署和容器部署教程如下:

三、内存资源限制

Hadoop 3.x 里 YARN 的内存限制策略有三种:

基于 poll 模式, NodeManager 内部会有一个 MonitorThread 定时检查每个 container 的内存使用(rss)是否超过了申请的内存,并将超过内存的 container 杀掉,在 ResourceManager 中能看到 Task 被 kill 的原因。这个策略有个小问题是检测有间隔,如果一个 container 短时间内大量申请内存,还是会有一点风险。另外一个问题就是,这个策略无法限制 CPU 的使用。

另外一种就是基于 Linux 的 CGroups 机制去限制每个 Container 的内存使用。CGroups 也是 Docker 限制进程资源的核心机制,不过在 YARN 中,是由 NodeManager 来完成 CGroups 策略的创建和销毁。Cgroups 的机制相比 MonitorThread 比,借助了操作系统原生的资源隔离机制,可以同时支持 CPU 和内存、网络的限制。

整个严格模式的通病就是:如果内存限制太严格,会导致任务容易挂掉,会有大量的沟通成本;CPU 限制太严格,任务的计算性能不佳,同时集群的资源利用率会低。

【注意】Hadoop 2.x 时还不支持 CGroup,内存限制主要基于 poll 的线程来限制,如果遇到 NodeManager 短时间分配大量内存,会导致内存限制策略失效,进而引发内存问题。

弹性模式的配置如下:



  yarn.nodemanager.resource.memory.enforced
  false



  yarn.nodemanager.resource.memory.enabled
  true



  yarn.nodemanager.elastic-memory-control.enabled
  true



  yarn.nodemanager.pmem-check-enabled
  true



  yarn.nodemanager.vmem-check-enabled
  false



  yarn.nodemanager.linux-container-executor.resources-handler.class
  org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler



  yarn.nodemanager.resource.percentage-physical-cpu-limit
  90

但是内存一般通过设置yarn.nodemanager.resource.memory-mb 参数即可控制NM节点的内存使用上限。主要是CPU的限制,接下来就细讲CPU资源限制。

四、CPU 资源限制

CGroups 是一种将任务及其子任务聚集和划分进一个垂直的分组的策略,并提供在此结构上的特别的操作。CGroups 是 Linux 内核功能,自内核版本 2.6.24 被引入。从 Yarn 角度,该功能使得限额容器的资源使用成为可能。一个示例是 CPU 使用,如果没有 CGroups,限制容器的 CPU 使用非常困难。

官方文档:https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/NodeManagerCgroups.html

前期准备工作:

###1、 分配可执行文件权限
chown root:hadoop /opt/apache/hadoop/bin/container-executor
# 该配置文件权限特殊,得设置6050权限
chmod 6050 /opt/apache/hadoop/bin/container-executor

### 2、配置 container-executor.cfg
vi  /opt/apache/hadoop/etc/hadoop/container-executor.cfg

yarn.nodemanager.local-dirs=/hadoop/yarn/local
yarn.nodemanager.log-dirs=/hadoop/yarn/log
yarn.nodemanager.linux-container-executor.group=hadoop 
banned.users=hdfs,yarn,mapred,bin
min.user.id=1000

1)启用 LCE

在 Nodemanager 中, CGroup 功能集成在 LinuxContainerExecutor中,所以要使用 CGroup 功能,必须设置 container-executor 为 LinuxContainerExecutor. 同时需要配置 NM 的 Unix Group,这个是可执行的二进制文件 container-executor 用来做安全验证的,需要与 container-executor.cfg 里面配置的一致。


  yarn.nodemanager.container-executor.class
  org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor


  yarn.nodemanager.linux-container-executor.group
  hadoop

2)启用 CGroup

LinuxContainerExecutor 并不会强制开启 CGroup 功能, 如果想要开启 CGroup 功能,必须设置 resource-handler-class 为 CGroupsLCEResourceHandler.


  yarn.nodemanager.linux-container-executor.resources-handler.class
  org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler

3)配置 Yarn CGroup 目录

NM 通过 yarn.nodemanager.linux-container-executor.cgroups.hierarchy 配置所有 Yarn Containers 进程放置的 CGroup 目录。


  yarn.nodemanager.linux-container-executor.cgroups.hierarchy
  /hadoop-yarn


  yarn.nodemanager.linux-container-executor.cgroups.mount
  false


  yarn.nodemanager.linux-container-executor.cgroups.mount-path
  /sys/fs/cgroup

提前创建目录

mkdir /sys/fs/cgroup/hadoop-yarn
# 需要给hadoop用户有执行权限即可
chown -R hadoop:haodop /sys/fs/cgroup/hadoop-yarn

3)CPU 资源限制

NM 主要使用两个参数来限制 containers CPU 资源使用。

如果设置为 true ,即便 NM 的 CPU 资源比较空闲, containers CPU 使用率也不能超过限制,这种配置下,可以严格限制 CPU 使用,保证每个 container 只能使用自己分配到的 CPU 资源。

但是如果设置为 false ,container 可以在 NM 有空闲 CPU 资源时,超额使用 CPU,这种模式下,可以保证 NM 总体 CPU 使用率比较高,提升集群的计算性能和吞吐量,所以建议使用非严格的限制方式(实际通过 CGroup 的 cpu share 功能实现)。不论这个值怎么设置,所有 containers 总的 CPU 使用率都不会超过 cpu-limit 设置的值。


  yarn.nodemanager.resource.percentage-physical-cpu-limit
  80


  yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage
  false
    

  yarn.nodemanager.resource.count-logical-processors-as-cores
  true

【注意】Linux 内核版本 3.10.0-327.el7.x86_64 上 Yarn 启用 CGroup 功能后,会触发内核 BUG,导致内核卡死,重启,NM 挂掉,所有运行的任务失败。所以如果需要启用 CGroup 功能,绝对不能使用 3.10.0-327.el7.x86_64 版本内核。亲测升级内核版本可解决该问题。

来源:大数据与云原生技术分享内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯