hadoop3.0 Yarn支持网络资源2:network设计文档说明 - 大数据技术参考_大数据技术文献_大数据趋势分析 -
当前位置:技术分享 > 技术参考 > 正文

hadoop3.0 Yarn支持网络资源2:network设计文档说明2018-01-25 10:49:58 | 编辑:hely | 查看: | 评论:0

1 本文讲了哪些配置项?2 DistributedShell是否可以让用户指定网络带宽?3 hadoop3 0网络设计存在哪些已知的问题?
问题导读

1.本文讲了哪些配置项?
2.DistributedShell是否可以让用户指定网络带宽?
3.hadoop3.0网络设计存在哪些已知的问题?

配置选项

为了执行一些配置项将在NM上可用。

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

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

3.yarn.nodemanager.resource.network.outbound-bandwidth-yarn-mbit管理员可以设置YARN containers最大的总的可用带宽,在yarn-site.xml文件中.如果没有指定,将会默认为yarn.nodemanager.resource.network.outbound-bandwidth-mbit的值

4.yarn.nodemanager.strict-resource-usage这是一个现有的配置参数,允许管理员指定允许的用法是“弹性的”还是“严格的”【‘elastic’ 或则‘strict’】。 如果没有启用严格的使用,每个YARN容器的网络带宽利用率被允许“burst’”达到yarn.nodemanager.resource.network.outbound-bandwidth-yarn-mbi值

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

配置在启动期间被验证(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配置。 如果这个接口设置不正确,结果会是执行可能不正确。

上一篇:hadoop3.0 Yarn支持网络1:network设计文档说明 hadoop3.0扩展Yarn资源模型详解1下一篇:

公众平台

搜索"raincent"或扫描下面的二维码