文章

SpringXD on yarn 使用Container工作组

SpringXD on Yarn支持Container分组。可以更好的控制admin和container分配。

  • 控制组内成员
  • 以组单位整体控制生命周期
  • 动态创建组
  • 重启失败的容器

实际上,XD on Yarn有内置分组admin和container。结合例子使用:

查看分组列表:

1
2
3
4
5
bin/xd-yarn clustersinfo -a application_1472450074786_0160
  CLUSTER ID
  ----------
  container
  admin

创建新的分组

1
2
bin/xd-yarn clustercreate -a application_1472450074786_0160 -c lihongzhe -i container-nolocality-template -p default -w 2
Cluster lihongzhe created.

查看分组列表

1
2
3
4
5
6
bin/xd-yarn clustersinfo -a application_1472450074786_0160
  CLUSTER ID
  ----------
  container
  lihongzhe
  admin

启动分组

1
bin/xd-yarn clusterstart -a application_1472450074786_0160 -c lihongzhe

查看分组状态

1
2
3
4
bin/xd-yarn clusterinfo -a application_1472450074786_0160 -c lihongzhe -v
  CLUSTER STATE  MEMBER COUNT  ANY PROJECTION  HOSTS PROJECTION  RACKS PROJECTION  ANY SATISFY  HOSTS SATISFY  RACKS SATISFY
  -------------  ------------  --------------  ----------------  ----------------  -----------  -------------  -------------
  RUNNING        2             2               {}                {}                0            {}             {}

可见,启动后,分组变成RUNNING态。此时Yarn上会新启动Container(原来是6)。

XD的Container也会随之启动

进一步,体验向yarn申请指定资源的container,并将job部署到指定的container上执行,达到资源的动态控制。

1、配置资源申请模板

xd中,container默认申请内存为512MB,这里修改server.yml配置文件,改成256MB

1
2
3
4
5
6
7
8
9
10
xd:
  appmasterMemory: 512M
  adminServers: 1
  adminMemory: 512M
  adminJavaOpts: -XX:MaxPermSize=128m
  adminLocality: false
  containers: 3
  containerMemory: 256M
  containerJavaOpts: -XX:MaxPermSize=128m
  containerLocality: false

push并submit新版本

1
2
bin/xd-yarn push
bin/xd-yarn submmit

再次创建并启动名为lihongzhe-256的分组,包含一个容器

1
2
bin/xd-yarn clustercreate -a application_1472450074786_0186 -c lihongzhe-256 -i container-nolocality-template -p default -w 1 -g lihongzhe-256
bin/xd-yarn clusterstart -a application_1472450074786_0186 -c lihongzhe-256

从yarn上查看新创建的容器状态

可见确实申请了256MB大小的container。

xd admin-ui上来看

然后通过指定groupid将任务部署到该container上去

1
xd:>job deploy --name jobsleepend --properties "module.sleepend.criteria=groups.equals('lihongzhe-256')"

job跑在了指定的container上。

本文由作者按照 CC BY 4.0 进行授权