遇到的问题
我的环境中hadoop版本是 3.2.1
在运行spark on yarn任务时,虽然给每个spark任务分配了一定的CPU资源,但是对于计算密集型任务,它会突破分配的cpu上限,导致cpu飙升。
yarn默认只管理内存资源,虽然也可以申请cpu资源,但是在没有cpu资源隔离的情况下效果并不是太好,在集群规模大,任务多时资源竞争的问题尤为严重。可以通过配置yarn提供的LinuxContainerExecutor结合cgroup来隔离cpu资源
配置cgroup
- 安装cgroup
sudo yum install -y libcgroup-tools.x86_64 libcgroup
cgroup的配置文件目录在/sys/fs/cgroup/ 或者 /cgroup
我的 linux 版本是centos7.8,目录在/sys/fs/cgroup
- 创建cgroup下的hadoop-yarn目錄
sudo mkdir -p /sys/fs/cgroup/cpu/hadoop-yarn
sudo mkdir -p /sys/fs/cgroup/memory/hadoop-yarn
sudo mkdir -p /sys/fs/cgroup/blkio/hadoop-yarn
sudo mkdir -p /sys/fs/cgroup/net_cls/hadoop-yarn
sudo mkdir -p /sys/fs/cgroup/devices/hadoop-yarn
- 启动cgroup
sudo systemctl start cgconfig
配置 yarn
- 修改container-executor和container-executor.cfg文件的所有者和权限
chown root:hadoop /$HADOOP_HOME/bin/container-executor
chmod 6050 /$HADOOP_HOME/bin/container-executor
sudo chown root:hadoop /$HADOOP_HOME/etc/hadoop/container-executor.cfg
sudo chown root:hadoop /$HADOOP_HOME/etc/hadoop
sudo chown root:hadoop /$HADOOP_HOME/etc
sudo chown root:hadoop /$HADOOP_HOME
sudo chmod 400 /$HADOOP_HOME/etc/hadoop/container-executor.cfg
系统要求etc/hadoop/container-executor.cfg 的所有父目录(一直到/ 目录) owner 都为 root,这个路径是默认${HADOOP_HOME}/etc/hadoop/container-executor.cfg,如果不方便修改所有父级目录为root权限,就需要新编译代