问题导读
1.网络作为Yarn的资源,有什么好处?
2.Yarn是否只支持调度和强制执行“传出流量”?
3.Yarn是否支持入口流量?
开始在学习之前,其实需要一定的基础,因为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为单位)作为构造函数的一部分。 我们建议将函数签名更改为以下内容
[mw_shl_code=bash,true]public static Resource newInstance(int memory, int vCores, int
outboundNetworkBandwidth)[/mw_shl_code]
Getter和setter函数将被添加到Resource类中。 一个新的repeated的领域资源将被添加到ResourceProto。
[mw_shl_code=bash,true]message ResourceProto {
optional int32 memory = 1;
optional int32 virtual_cores = 2;
optional int32 outbound_network_bandwidth = 3;
}[/mw_shl_code]
当调度决策时,考虑outboundNetworkBandwidth,DominantResourceCalculator将会被修改。以下配置选项将可用:
1.yarn.scheduler.enable-network-scheduling配置设置“enable”或“disable”网络作为资源,允许管理员在他们认为合适的时候启用它。 如果将此设置设置为关闭,则会导致节点上的网络带宽向RM报告,但为了调度而忽略。
2.yarn.scheduler.minimum-allocation-outbound-network-bandwidth-mbit,yarn.scheduler.maximum-allocation-outbound-network-bandwidth-mbit设置最小和最大出站网络带宽分配。这些默认值分别为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。
下一篇:
adoop3.0 Yarn支持网络资源2:network设计文档说明【中文】
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23661
|
|