转:http://blog.csdn.net/BlackEnn/article/details/52879989
1.httpclient方式调用Kylin Resetful API
- <pre name="code" class="java"> static String encoding;
- StringBuffer refreshBuffer = new StringBuffer();
- /**
- * 通过httpClient方式调用kylin Restful接口
- *
- * @param kylinIp
- * @param para
- * @param method
- * @param params
- * @return
- */
- public StringBuffer excute(String kylinIp, String para, String method, String params) {
- StringBuffer out = new StringBuffer();
- try {
- URL url = new URL("http://" + kylinIp + "/kylin/api" + para);
- System.out.println(url);
- HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setRequestMethod(method);
- connection.setDoOutput(true);
- connection.setRequestProperty("Authorization", "Basic " + encoding);
- connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
- if (params != null) {
- byte[] outputInBytes = params.getBytes("UTF-8");
- OutputStream os = connection.getOutputStream();
- os.write(outputInBytes);
- os.close();
- }
- InputStream content = (InputStream) connection.getInputStream();
- // 解决乱码问题
- BufferedReader in = new BufferedReader(new InputStreamReader(content, Charset.forName("UTF-8")));
- String line;
- while ((line = in.readLine()) != null) {
- out.append(line);
- }
- in.close();
- connection.disconnect();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return out;
- }
- /**
- * 登录kylin,输入身份认证,默认用户名为ADMIN,密码为KYLIN
- *
- * @return
- */
- public StringBuffer login() {
- String method = "POST";
- String para = "/user/authentication";
- byte[] key = ("ADMIN:KYLIN").getBytes();
- encoding = Base64.encodeBase64String(key);
- return excute(PropertyUtil.prop.getProperty("kylinIp"), para, method, null);
- }
- /**
- * 获取cube下的所有job
- *
- * @param cubeName
- * @param params
- * @return
- */
- public StringBuffer getJob(String cubeName, String params) {
- login();
- String method = "GET";
- String para = "/api/jobs/list/OADepartment/" + cubeName;
- return excute(PropertyUtil.prop.getProperty("kylinIp"), para, method, params);
- }
- /**
- * 获取cube下的所有segment
- *
- * @param cubeName
- * @param params
- * @return
- */
- public StringBuffer getSeg(String cubeName, String params) {
- login();
- String method = "GET";
- String para = "/cubes/" + cubeName;
- return excute(PropertyUtil.prop.getProperty("kylinIp"), para, method, params);
- }
- /**
- * 获取所有的cube名称
- *
- * @param params
- * @return
- */
- public StringBuffer getList(String params) {
- login();
- String method = "GET";
- String para = "/cubes";
- return excute(PropertyUtil.prop.getProperty("kylinIp"), para, method, params);
- }
- /**
- * Rebuild Cube
- *
- * @param cubeName
- * @param params
- * @return
- */
- public StringBuffer buildCube(String cubeName, String params) {
- String method = "PUT";
- String para = "/cubes/" + cubeName + "/rebuild";
- return excute(PropertyUtil.prop.getProperty("kylinIp"), para, method, params);
- }
- /**
- * discard掉某个job
- *
- * @param jobId
- * @param params
- */
- public void discard(String jobId, String params) {
- login();
- String method = "PUT";
- String para = "/jobs" + jobId + "/cancel";
- excute(PropertyUtil.prop.getProperty("kylinIp"), para, method, params);
- }
- /**
- * refresh Cube
- *
- * @param startTime
- * @param endTime
- * @param refreshCube
- * @return
- */
- public StringBuffer refresh(Date startTime, Date endTime, String refreshCube) {
- login();
- String body = "{\"startTime\":\"" + startTime.getTime() + "\", \"endTime\":\"" + endTime.getTime()
- + "\", \"buildType\":\"REFRESH\"}";
- StringBuffer refreshResult = new StringBuffer();
- refreshResult.append(buildCube(refreshCube, body));
- return refreshResult;
- }
- /**
- * add Segment
- *
- * @param startTime
- * @param endTime
- * @param addCube
- * @return
- */
- public StringBuffer add(Date startTime, Date endTime, String addCube) {
- login();
- String body = "{\"startTime\":\"" + startTime.getTime() + "\", \"endTime\":\"" + endTime.getTime()
- + "\", \"buildType\":\"BUILD\"}";
- StringBuffer addResult = new StringBuffer();
- addResult.append(buildCube(addCube, body));
- return addResult;
- }
- <pre name="code" class="java"> /**
- * 通过kylin进行查询
- *
- * @param params
- * @return
- */
- public StringBuffer query(String params) {
- String method = "POST";
- String para = "/query";
- return excute(PropertyUtil.prop.getProperty("kylinIp"), para, method, params);
- }
- /**
- * kylin查询主体信息
- *
- * @param sql
- * @param lookupId
- * @param projectName
- * @return
- */
- public StringBuffer getTableTime(String sql, String lookupId, String projectName) {
- login();
- String body = "{\"sql\": \"" + sql + lookupId + "\",\"offset\":0,\"limit\":" + KYLIN_LIMIT
- + ",\"acceptPartial\":false, \"project\":\"" + projectName + "\"}";
- StringBuffer queryResult = query(body);
- return queryResult;
- }
2.具体引用
①实例化上述Kylin Api类
- <span style="font-family:Microsoft YaHei;font-size:14px;"> /**
- * 实例化KylinApi类
- */
- KylinApi api = new KylinApi();</span>
②获取cube下的所有job
- <span style="font-family:Microsoft YaHei;font-size:14px;">public StringBuffer getJobId(String projectName, String cubeName, String params) {
- logger.info("获取某个cube下的job Id:" + "projectName: " + projectName + " " + "cubeName: " + cubeName);
- StringBuffer job = new StringBuffer();
- job = api.getJob(projectName, cubeName, params);
- return job;
- }</span>
③获取cube下的所有segment
- <span style="font-family:Microsoft YaHei;font-size:14px;">public StringBuffer getSegment(String cubeName,String params) {
- logger.info("获取某个cube的segment: "+"cubename: "+cubeName);
- StringBuffer segment = new StringBuffer();
- segment=api.getSeg(cubeName,params);
- return segment;
- }</span>
④获取当前Kylin下所有cube名称
- <span style="font-family:Microsoft YaHei;font-size:14px;">public StringBuffer getCubeLists(String params) {
- StringBuffer cube = new StringBuffer();
- cube = api.getList(params);
- return cube;
- }</span>
⑤Refresh cube
- <span style="font-family:Microsoft YaHei;font-size:14px;"> public StringBuffer refreshCube(String refreshStartTime, String refreshEndTime, String refreshCube) {
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
- logger.info("Refresh操作: " + "开始时间: " + refreshStartTime + " " + "结束时间: " + refreshEndTime + " "
- + "cubename: " + refreshCube);
- try {
- Date startTime = format.parse(refreshStartTime + " " + "08:00:00");
- Date endTime = format.parse(refreshEndTime + " " + "08:00:00");
- refreshBuffer = api.refresh(startTime, endTime, refreshCube);
- } catch (ParseException e) {
- logger.info(e.getMessage());
- }
- return refreshBuffer;
- }</span>
⑥Add Segment
- <span style="font-family:Microsoft YaHei;font-size:14px;"> public StringBuffer addSegment(String addStartTime, String addEndTime, String addCube) {
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
- logger.info(
- "新增操作: " + "开始时间: " + addStartTime + " " + "结束时间: " + addEndTime + " " + "cubename: " + addCube);
- try {
- Date startTime = format.parse(addStartTime + " " + "08:00:00");
- Date endTime = format.parse(addEndTime + " " + "08:00:00");
- addBuffer = api.add(startTime, endTime, addCube);
- } catch (ParseException e) {
- logger.info(e.getMessage());
- }
- return addBuffer;
- }</span>
⑦discard某个job
- <span style="font-family:Microsoft YaHei;font-size:14px;">public void discardJob(String jobId, String params) {
- api.discard(jobId, params);
- }</span>
⑧通过kylin查询
- <span style="font-family:Microsoft YaHei;font-size:14px;"> public StringBuffer testCubeQuery(String sql, String lookupId, String projectName) {
- StringBuffer timeBuf = new StringBuffer();
- timeBuf=api.getTableTime(sql,lookupId,projectName);
- return timeBuf;
- }</span>
注:若kylin给出的Restful API对应没有params,均取null值。
3.参考文献