温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github:
https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢
1.文档编写目的
用户在使用CDH集群大数据平台时会有需求在自己的统一管理平台上通过API接口能够动态的设置Yarn资源池,Cloudera Manager提供了丰富的API接口对CDH集群的各个服务进行配置等操作,在上一篇文章Fayson介绍了《如何使用curl命令调用CM的API动态配置Yarn资源池》,本篇文章Fayson主要介绍如何使用Java调用CM的API接口动态的配置Yarn资源池并使其生效。
- 本次Fayson的测试环境
1.CM和CDH版本为5.15
2.获取Cloudera Manager的API接口
1.登录Cloudera Manager,点击菜单“支持”->“API文档”
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Jd95IqJ-1583680662806)(https://ask.qcloudimg.com/http-save/yehe-1522219/om3wpv26ju.jpeg)]
2.进入API文档界面,可以看到API的版本为v19
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2FDhYqWn-1583680662807)(https://ask.qcloudimg.com/http-save/yehe-1522219/clz0trx28y.jpeg)]
3.本篇文章要用到的API接口说明
http://<cm_server>:7180/clusters
http://<cm_server>:7180/api/v19/clusters/{
clusterName}/services/{
serviceName}/config
http://<cm_server>:7180/api/v19/clusters/{
clusterName}/commands/poolsRefresh
(可左右滑动)
共使用到3个接口:
第一个接口用于获取集群的信息,如集群的名称,以供2、3接口使用
第二个接口用于设置Yarn的资源池,接口中的{serviceName}修改为yarn
第三个接口用于刷新Yarn的资源池
3.Java示例工程
1.使用Maven创建cmapi-demo的Java工程,pom.xml内容如下:
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.4</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
</dependencies>
(可左右滑动)
2.创建HttpUtils.java工具类,该类主要使用HttpClient方式调用CM的API接口
package com.cloudera.utils;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.