hadoop3.0 Yarn支持网络资源:network原理设计文档说明【中文】

简介: hadoop3.0 Yarn支持网络资源:network原理设计文档说明【中文】

开始在学习之前,其实需要一定的基础,因为Yarn里面使用了Linux TC和Cgroup。其实这两个不是新鲜的概念,很多人已经通过他们控制Linux流量,而这里hadoop官方将他们应用于Yarn。

那么什么是TC?Linux 流量控制程序

什么是Cgroup?Cgroups 是 control groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu,memory,IO等等)的机制。有了这些基本认识,更多大家可搜索,后面about云将会补充一些相关内容。下文帮助大家了解Yarn的网络设计

介绍


作为在YARN上允许多个工作负载的一部分,我们需要首先添加对网络的支持使Storm等应用程序能够在YARN上运行。 例如,Storm,往往是网络I / O限制。 对于Storm在YARN上更可预测的运行,我们需要能够指定和执行带宽限制。 另外,增加网络作为资源将会也帮助其他应用程序,如MapReduce和Tez以更可预测的方式运行。

Network作为资源


网络作为一种资源,有两个方面应用程序需要考虑-带宽和网络每秒ops。我们决定增加支持(出站)网络带宽作为资源。网络有两方面,带宽的sustained速率和burst率。 “sustained” 率是container能够发送出站流量,而不会因NM应用强制规则而受到限制。尽管如此,取决于整体网络利用率,container 可以允许以更高的 “burst”率。这个“burst”的速度是不能保证的。container 分配请求只能包含一个“sustained rate”.”的请求。与CPU类似,集群管理员将被允许在执行方面启用或禁用(“burst”)。

注意,我们只会支持调度和强制执行“传出流量”,这是由于流量管制的限制。 有关其他详细信息,请参阅下面的内容。

调度


考虑到只建模网络带宽的决定,调度变得简单,类似于内存和CPU。所有NMS将报告可用带宽(以兆位/秒)到RM。

Resource类将被修改为接受网络带宽(以mbit / sec为单位)作为构造函数的一部分。 我们建议将函数签名更改为以下内容

public static Resource newInstance(int memory, int vCores, int
outboundNetworkBandwidth)

Getter和setter函数将被添加到Resource类中。 一个新的repeated的领域资源将被添加到ResourceProto。

message ResourceProto {
optional int32 memory = 1;
optional int32 virtual_cores = 2;
optional int32 outbound_network_bandwidth = 3;
}

当调度决策时,考虑outboundNetworkBandwidth,DominantResourceCalculator将会被修改。以下配置选项将可用:

1.yarn.scheduler.enablenetworkscheduling配置设置启用或禁用网络作为资源,允许管理员在他们认为合适的时候启用它。 如果将此设置设置为关闭,则会导致节点上的网络带宽向RM报告,但为了调度而忽略。

2.yarn.scheduler.minimumallocationoutboundnetworkbandwidthmbit,yarn.scheduler.maximumallocationoutboundnetworkbandwidthmbit设置最小和最大出站网络带宽分配。这些默认值分别为1 mbit / sec和1000 mbit / sec。

机架感知


当涉及到网络作为一种资源时,在分配过程中还有一个额外的考虑。 一些应用程序将启动相互通信的containers。在这种情况下,最好在同一个机架内启动contains。 在机架间通信的情况下,可能无法保证容器所需的带宽。 在这种情况下,将容器分配给可用带宽最多的机架将是有益的。

调度程序可以采用以下策略;

1.如果这是分配的第一个容器,请将其分配到网络最高的机架上可用的带宽。

2.如果此应用程序的容器已经分配,尝试在已经有容器的机架上分配容器。 如果这些机架上没有容量,请找到最适合容器的机架(按拓扑结构)。 虽然这可能不会导致最佳表现,但我们认为这是第一步适合的。 这个政策可以在将来重新审视。

机架信息已经通过配置core-site.xml中net.topology.script.file.name的配置字段。建议是使用这些信息并使用上面列出的政策。

执行


概述

关于执行,本文件仅限于:

1)只支持linux

2)仅出口流量。

关于入口流量的说明

与出站流量不同,入站流量不是以与出站流量相同的方式进行分区或标记的(有关出站流量整形的详细信息,请参阅下文)。 入口qdisc不是有效的,我们不能像出口流量一样使用细粒度的过滤器和规则。 另外,当流量到达入口qdisc时,网络带宽已经被消耗。 在这个阶段,如果某种入口策略已经到位,那么就没有队列(也没有延迟机制)可用,而数据包只是被丢弃。 由于这些原因,入口流量支持暂时还不在范围之内。

支持出口流量是通过两个方面实现:net_cl Cgroup系统和Linux流量工具TC

net_cls 2 cgroup 子系统

net_cls cgroup子系统允许我们使用称为“classid”的32位类标识符来“标记”传出的数据包。这个classid是在文件net_cls.classid(位于挂载的cgroup目录下)中指定的。 这个classid的值标识一个流量“句柄”,随后可用于流量整形。 对于每个需要网络调节的YARN容器,生成一个classid并写入相应cgroup的classid文件。

流量整形使用tc3

一旦标记就绪,tc shell实用程序(Traffic Control的缩写)就可以用来指定与正在使用的classid相对应的流量整形规则。 HTB4(分级令牌缓冲区)classful qdisc用于实现基于类id的流量整形5。

配置选项


为了执行一些配置项将在NM上可用。
1.yarn.nodemanager.resource.network.interface管理员可以指定YARN使用的网络接口(以及正在运行的应用程序)。 流量整形规则应用于此接口。 如果可能的话,这是自动确定的,但在检测失败或未配置的情况下默认为eth0。

2.yarn.nodemanager.resource.network.outboundbandwidthmbit管理员可以在节点设置 yarn-site.xml有效带宽.如果可能,默认带宽将自动确定。如果无法确定,它将被设置为1000兆位/秒的除非被管理员在yarn-site文件中配置重写覆盖。此值连同为Yarn容器分配的带宽(见下文)用于确定在YARN容器中不运行的进程的可用(保证)出站网络带宽的数量。 有关更多信息,请参阅NM启动部分。

3.yarn.nodemanager.resource.network.outboundbandwidthyarnmbit管理员可以设置YARN containers最大的总的可用带宽,在yarn-site.xml文件中.如果没有指定,将会默认为yarn.nodemanager.resource.network.outboundbandwidthmbit的值
4.yarn.nodemanager.strictresourceusage这是一个现有的配置参数,允许管理员指定允许的用法是“弹性的”还是“严格的”。 如果没有启用严格的使用,每个YARN容器的网络带宽利用率被允许“burst’”达到yarn.nodemanager.resource.network.outboundbandwidthyarnmbi值

验证配置——默认值和非默认值


配置在启动期间被验证(RM / NM)。 根据启用了网络调度的部署YARN的群集,默认配置可能无效(例如,eth0可能不是从属节点上的有效接口,或配置的最大接口带宽不正确)。 在这种情况下,默认值或指定的配置参数是无效的,网管将记录一个错误,并启动失败。

NM启动


一旦配置被验证,在NM启动期间执行以下操作:
1.安装net_clcgroup子系统
2.对于正在使用的网络接口,应用以下tc操作:
a.添加一个HTB队列规则(qdisc)

tc qdisc add dev eth0 root handle 10: htb

b.对于队列规则添加一个顶层类

tc class add dev eth0 parent 10: classid 10:1 htb rate 1000mbit default 3

c.启用过滤器基于classid

tc filter add dev eth0 parent 10: protocol ip prio 10 handle 1: cgroup

现在附加两个类,一个用于容器容器的最大允许流量,另一个用于剩余的带宽(默认类3)。默认的类有一个允许ceil相应的接口maxbandwidth,允许它使用所有可用带宽,如果不使用的话。

tc class add dev eth0 parent 10:1 classid 10:2 htb rate 700mbit
tc class add dev eth0 parent 10:1 classid 10:3 htb rate 300mbit ceil 1000mbit

要执行TC操作,我们需要root权限。我们将修改containerexecutor.c允许此功能。

创建一个Ccgroup和分配一个classids到Container

创建一个cgroup(为net_cls子系统)为每一个容器,每个容器被分配一个唯一的(未使用的)classid,用于标记源自这个cgroup的数据包。 例如 :

mkdir /cgroup/net_cls/container_1
echo $PID >> /cgroup/net_cls/container_1/tasks
echo 0x100007 > /cgroup/net_cls/container_1/net_cls.classid

该功能将作为CGroupsLCEResourceHandler类的一部分来实现。

将基于classid的流量整形规则应用于指定的接口

一旦对容器进行cgroup相关的更改,具有所需速率的类就需要应用于htb树。 这里使用的classid需要与写入net_class.classid文件的classid相同。 取决于是否启用了严格的强制执行,还配置了“ceil”突发速率:

tc class add dev eth0 parent 10: classid 10:7 htb rate 50mbit ceil 700mbi

如上所述,containerexecutor.c将修改以添加对此功能的支持。

资源本地化,Shuffle,,日志聚合,HDFS

NM提供的某些共享服务可能会消耗大量的网络带宽,如资源本地化,日志聚合和shuffle.。 由于这些服务是由NM本身提供的,所以我们不能对它们应用容器特定的限制。 同样的问题也适用于HDFS。

有两个潜在的解决方案(在Linux上)

1.在一个CGroup(和一个关联的tc规则)下运行一个新的NM 配置参数控制NM可用的带宽量。 由于这将限制可用于NM的带宽量(否则,其不可用),所以可能会导致性能下降。 在这种情况下,HDFS带宽利用率(例如服务远程读取)仍将不受限制。

2.在顶层HTB qdisc之下创建两个子层次结构.一个用于 YARN容器和一个用于其它每一个。 这将保证带宽的操作,如shuffle,,日志聚合,同时允许这些操作比保证的消耗更多的带宽,如果可用的话。 这种方法的意义在于,在YARN容器的高网络利用率的情况下,shuffle,对数聚集,HDFS读取(服务)可以被限制到较小的带宽量。 本文档的NM启动部分假设我们将使用这种方法。

一个更好的长期解决方案可能是在YARN容器中产生logaggregation和shuffle作为微服务,然后我们可以应用容器特定的限制,如本文所述。

其它

RM和NM将不得不进行修改以启用网络的计费(计费)。 此功能目前为内存和CPU启用。 为了列出可用/分配的网络带宽,还需要一些UI更改。

MapReduce, DistributedShell

MapReduce和DistributedShell都将被修改,将网络视为资源。 在MapReduce的情况下,将添加作业配置选项来设置map和reduce任务所需的网络带宽。 在分布式shell的情况下,将添加命令行选项以允许用户指定网络带宽。

已知的问题

1.目前的执行机制只有Linux。

2.在Linux上,目前的执行机制只支持出口的流量整形。 入口流量不能以相同的方式成形。 这意味着从YARN容器读取远程HDFS不会受到限制。 然而,HDFS写入会受到限制。

3.如果是多宿主环境,管理员将不得不明确地设置网络接口在NM配置。 如果这个接口设置不正确,结果会是执行可能不正确。

翻译:官网network文档,如有更好的理解或则建议,欢迎大家讨论

更多信息关于net_cls 和 classids,查阅:

https://access.redhat.com/documentation/enUS/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/secnet_cls.html

更多信息关于tc,查看

http://www.lartc.org/manpages/tc.txt

HTB和它的“borrowing”机制,详细介绍

http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm 和这里:

http://tldp.org/HOWTO/TrafficControlHOWTO/classfulqdiscs.html

目录
相关文章
|
24天前
|
存储 人工智能
从零到一打造知识网络:你选对文档软件了吗?
在信息爆炸时代,学术工作者面临高效管理知识的挑战。传统文档管理软件难以满足“知识动态积累”与“多领域交叉”的需求。动态结构化看板通过多维度卡片化管理,以标签、层级和网状关联方式动态呈现文档和笔记,实现知识的系统化整合。例如多维标签系统和文档流动视图,能够帮助快速检索和关联资料,成为学术研究的“第二大脑”。
|
2月前
|
存储 分布式计算 资源调度
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
85 5
|
2月前
|
资源调度 数据可视化 大数据
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
37 4
|
2月前
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
182 5
|
2月前
|
XML 资源调度 网络协议
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
145 4
|
2月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
88 4
|
3月前
|
分布式计算 资源调度 Hadoop
Hadoop YARN资源管理-容量调度器(Yahoo!的Capacity Scheduler)
详细讲解了Hadoop YARN资源管理中的容量调度器(Yahoo!的Capacity Scheduler),包括队列和子队列的概念、Apache Hadoop的容量调度器默认队列、队列的命名规则、分层队列、容量保证、队列弹性、容量调度器的元素、集群如何分配资源、限制用户容量、限制应用程序数量、抢占申请、启用容量调度器以及队列状态管理等方面的内容。
93 3
|
3月前
|
分布式计算 资源调度 Hadoop
Hadoop YARN资源管理-公平调度器(Fackbook的Fair Scheduler)
详细介绍了Hadoop YARN资源管理中的公平调度器(Fair Scheduler),包括其概述、配置、队列结构、以及如何将作业提交到指定队列,展示了公平调度器如何通过分配文件(fair-scheduler.xml)来控制资源分配,并提供了配置示例和如何通过命令行提交作业到特定队列的方法。
192 0
Hadoop YARN资源管理-公平调度器(Fackbook的Fair Scheduler)
|
5天前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
42 17
|
16天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
下一篇
DataWorks