yarn默认只管理内存资源,虽然也可以申请cpu资源,但是在没有cpu资源隔离的情况下效果并不是太好.在集群规模大,任务多时资源竞争的问题尤为严重.
还好yarn提供的LinuxContainerExecutor可以通过cgroup来隔离cpu资源
cgroup
cgroup是系统提供的资源隔离功能,可以隔离系统的多种类型的资源,yarn只用来隔离cpu资源
安装cgroup
默认系统已经安装了cgroup了,如果没有安装可以通过命令安装
yum install -y libcgroup
然后通过命令启动
/etc/init.d/cgconfig start
查看/cgroup
目录,可以看到里面已经创建了一些目录,这些目录就是可以隔离的资源
drwxr-xr-x 2 root root 0 3月 19 20:56 blkio
drwxr-xr-x 3 root root 0 3月 19 20:56 cpu
drwxr-xr-x 2 root root 0 3月 19 20:56 cpuacct
drwxr-xr-x 2 root root 0 3月 19 20:56 cpuset
drwxr-xr-x 2 root root 0 3月 19 20:56 devices
drwxr-xr-x 2 root root 0 3月 19 20:56 freezer
drwxr-xr-x 2 root root 0 3月 19 20:56 memory
drwxr-xr-x 2 root root 0 3月 19 20:56 net_cls
如果目录没有创建可以执行
cd /
mkdir cgroup
mount -t tmpfs cgroup_root ./cgroup
mkdir cgroup/cpuset
mount -t cgroup -ocpuset cpuset ./cgroup/cpuset/
mkdir cgroup/cpu
mount -t cgroup -ocpu cpu ./cgroup/cpu/
mkdir cgroup/memory
mount -t cgroup -omemory memory ./cgroup/memory/
通过cgroup隔离cpu资源的步骤为
1. 在cpu目录创建分组
cgroup以组为单位隔离资源,同一个组可以使用的资源相同
一个组在cgroup里面体现为一个文件夹,创建分组直接使用mkdir
命令即可.
组下面还可以创建下级组.最终可以形成一个树形结构来完成复杂的资源隔离方案.
每当创建了一个组,系统会自动在目录立即创建一些文件,资源控制主要就是通过配置这些文件来完成
--w--w--w- 1 root root 0 3月 19 21:09 cgroup.event_control
-rw-r--r-- 1 root root 0 3月 19 21:09 cgroup.procs
-rw-r--r-- 1 root root 0 3月 19 21:09 cpu.cfs_period_us
-rw-r--r-- 1 root root 0 3月 19 21:09 cpu.cfs_quota_us
-rw-