《Apache Kylin将curl方式改为httpclient方式调用Restful API》

转:http://blog.csdn.net/BlackEnn/article/details/52879989



1.httpclient方式调用Kylin Resetful API

  1. <pre name="code" class="java">    static String encoding;  
  2.     StringBuffer refreshBuffer = new StringBuffer();  
  3.   
  4.     /** 
  5.      * 通过httpClient方式调用kylin Restful接口 
  6.      *  
  7.      * @param kylinIp 
  8.      * @param para 
  9.      * @param method 
  10.      * @param params 
  11.      * @return 
  12.      */  
  13.     public StringBuffer excute(String kylinIp, String para, String method, String params) {  
  14.         StringBuffer out = new StringBuffer();  
  15.         try {  
  16.             URL url = new URL("http://" + kylinIp + "/kylin/api" + para);  
  17.             System.out.println(url);  
  18.             HttpURLConnection connection = (HttpURLConnection) url.openConnection();  
  19.             connection.setRequestMethod(method);  
  20.             connection.setDoOutput(true);  
  21.             connection.setRequestProperty("Authorization""Basic " + encoding);  
  22.             connection.setRequestProperty("Content-Type""application/json;charset=UTF-8");  
  23.             if (params != null) {  
  24.                 byte[] outputInBytes = params.getBytes("UTF-8");  
  25.                 OutputStream os = connection.getOutputStream();  
  26.                 os.write(outputInBytes);  
  27.                 os.close();  
  28.             }  
  29.             InputStream content = (InputStream) connection.getInputStream();  
  30.             // 解决乱码问题  
  31.             BufferedReader in = new BufferedReader(new InputStreamReader(content, Charset.forName("UTF-8")));  
  32.             String line;  
  33.             while ((line = in.readLine()) != null) {  
  34.                 out.append(line);  
  35.             }  
  36.             in.close();  
  37.             connection.disconnect();  
  38.   
  39.         } catch (Exception e) {  
  40.             e.printStackTrace();  
  41.         }  
  42.         return out;  
  43.     }  
  44.   
  45.     /** 
  46.      * 登录kylin,输入身份认证,默认用户名为ADMIN,密码为KYLIN 
  47.      *  
  48.      * @return 
  49.      */  
  50.     public StringBuffer login() {  
  51.         String method = "POST";  
  52.         String para = "/user/authentication";  
  53.         byte[] key = ("ADMIN:KYLIN").getBytes();  
  54.         encoding = Base64.encodeBase64String(key);  
  55.         return excute(PropertyUtil.prop.getProperty("kylinIp"), para, method, null);  
  56.     }  
  57.   
  58.     /** 
  59.      * 获取cube下的所有job 
  60.      *  
  61.      * @param cubeName 
  62.      * @param params 
  63.      * @return 
  64.      */  
  65.     public StringBuffer getJob(String cubeName, String params) {  
  66.         login();  
  67.         String method = "GET";  
  68.         String para = "/api/jobs/list/OADepartment/" + cubeName;  
  69.         return excute(PropertyUtil.prop.getProperty("kylinIp"), para, method, params);  
  70.     }  
  71.   
  72.     /** 
  73.      * 获取cube下的所有segment 
  74.      *  
  75.      * @param cubeName 
  76.      * @param params 
  77.      * @return 
  78.      */  
  79.     public StringBuffer getSeg(String cubeName, String params) {  
  80.         login();  
  81.         String method = "GET";  
  82.         String para = "/cubes/" + cubeName;  
  83.         return excute(PropertyUtil.prop.getProperty("kylinIp"), para, method, params);  
  84.     }  
  85.   
  86.     /** 
  87.      * 获取所有的cube名称 
  88.      *  
  89.      * @param params 
  90.      * @return 
  91.      */  
  92.     public StringBuffer getList(String params) {  
  93.         login();  
  94.         String method = "GET";  
  95.         String para = "/cubes";  
  96.         return excute(PropertyUtil.prop.getProperty("kylinIp"), para, method, params);  
  97.     }  
  98.   
  99.     /** 
  100.      * Rebuild Cube 
  101.      *  
  102.      * @param cubeName 
  103.      * @param params 
  104.      * @return 
  105.      */  
  106.     public StringBuffer buildCube(String cubeName, String params) {  
  107.         String method = "PUT";  
  108.         String para = "/cubes/" + cubeName + "/rebuild";  
  109.         return excute(PropertyUtil.prop.getProperty("kylinIp"), para, method, params);  
  110.     }  
  111.   
  112.     /** 
  113.      * discard掉某个job 
  114.      *  
  115.      * @param jobId 
  116.      * @param params 
  117.      */  
  118.     public void discard(String jobId, String params) {  
  119.         login();  
  120.         String method = "PUT";  
  121.         String para = "/jobs" + jobId + "/cancel";  
  122.         excute(PropertyUtil.prop.getProperty("kylinIp"), para, method, params);  
  123.     }  
  124.   
  125.     /** 
  126.      * refresh Cube 
  127.      *  
  128.      * @param startTime 
  129.      * @param endTime 
  130.      * @param refreshCube 
  131.      * @return 
  132.      */  
  133.     public StringBuffer refresh(Date startTime, Date endTime, String refreshCube) {  
  134.         login();  
  135.         String body = "{\"startTime\":\"" + startTime.getTime() + "\", \"endTime\":\"" + endTime.getTime()  
  136.                 + "\", \"buildType\":\"REFRESH\"}";  
  137.         StringBuffer refreshResult = new StringBuffer();  
  138.         refreshResult.append(buildCube(refreshCube, body));  
  139.         return refreshResult;  
  140.     }  
  141.   
  142.     /** 
  143.      * add Segment 
  144.      *  
  145.      * @param startTime 
  146.      * @param endTime 
  147.      * @param addCube 
  148.      * @return 
  149.      */  
  150.     public StringBuffer add(Date startTime, Date endTime, String addCube) {  
  151.         login();  
  152.         String body = "{\"startTime\":\"" + startTime.getTime() + "\", \"endTime\":\"" + endTime.getTime()  
  153.                 + "\", \"buildType\":\"BUILD\"}";  
  154.         StringBuffer addResult = new StringBuffer();  
  155.         addResult.append(buildCube(addCube, body));  
  156.         return addResult;  
  157.     }  
  1. <pre name="code" class="java">    /** 
  2.      * 通过kylin进行查询 
  3.      *  
  4.      * @param params 
  5.      * @return 
  6.      */  
  7.     public StringBuffer query(String params) {  
  8.         String method = "POST";  
  9.         String para = "/query";  
  10.         return excute(PropertyUtil.prop.getProperty("kylinIp"), para, method, params);  
  11.     }  
  12.   
  13.     /** 
  14.      * kylin查询主体信息 
  15.      *  
  16.      * @param sql 
  17.      * @param lookupId 
  18.      * @param projectName 
  19.      * @return 
  20.      */  
  21.     public StringBuffer getTableTime(String sql, String lookupId, String projectName) {  
  22.         login();  
  23.         String body = "{\"sql\": \"" + sql + lookupId + "\",\"offset\":0,\"limit\":" + KYLIN_LIMIT  
  24.                 + ",\"acceptPartial\":false, \"project\":\"" + projectName + "\"}";  
  25.         StringBuffer queryResult = query(body);  
  26.         return queryResult;  
  27.     }  



2.具体引用

①实例化上述Kylin Api类

  1. <span style="font-family:Microsoft YaHei;font-size:14px;">    /** 
  2.      * 实例化KylinApi类 
  3.      */  
  4.     KylinApi api = new KylinApi();</span>  

②获取cube下的所有job

  1. <span style="font-family:Microsoft YaHei;font-size:14px;">public StringBuffer getJobId(String projectName, String cubeName, String params) {  
  2.     logger.info("获取某个cube下的job Id:" + "projectName: " + projectName + "  " + "cubeName:  " + cubeName);  
  3.     StringBuffer job = new StringBuffer();  
  4.     job = api.getJob(projectName, cubeName, params);  
  5.     return job;  
  6. }</span>  



③获取cube下的所有segment

  1. <span style="font-family:Microsoft YaHei;font-size:14px;">public StringBuffer getSegment(String cubeName,String params) {  
  2.         logger.info("获取某个cube的segment:   "+"cubename:  "+cubeName);  
  3.         StringBuffer segment = new StringBuffer();  
  4.         segment=api.getSeg(cubeName,params);  
  5.         return segment;  
  6. }</span>  


④获取当前Kylin下所有cube名称

  1. <span style="font-family:Microsoft YaHei;font-size:14px;">public StringBuffer getCubeLists(String params) {  
  2.     StringBuffer cube = new StringBuffer();  
  3.     cube = api.getList(params);  
  4.     return cube;  
  5. }</span>  


⑤Refresh cube

  1. <span style="font-family:Microsoft YaHei;font-size:14px;">    public StringBuffer refreshCube(String refreshStartTime, String refreshEndTime, String refreshCube) {  
  2.         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
  3.         logger.info("Refresh操作: " + "开始时间: " + refreshStartTime + "   " + "结束时间: " + refreshEndTime + "   "  
  4.                 + "cubename: " + refreshCube);  
  5.         try {  
  6.             Date startTime = format.parse(refreshStartTime + " " + "08:00:00");  
  7.             Date endTime = format.parse(refreshEndTime + " " + "08:00:00");  
  8.             refreshBuffer = api.refresh(startTime, endTime, refreshCube);  
  9.         } catch (ParseException e) {  
  10.             logger.info(e.getMessage());  
  11.         }  
  12.         return refreshBuffer;  
  13.     }</span>  

⑥Add Segment

  1. <span style="font-family:Microsoft YaHei;font-size:14px;">    public StringBuffer addSegment(String addStartTime, String addEndTime, String addCube) {  
  2.         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
  3.         logger.info(  
  4.                 "新增操作: " + "开始时间: " + addStartTime + "   " + "结束时间: " + addEndTime + "   " + "cubename: " + addCube);  
  5.         try {  
  6.             Date startTime = format.parse(addStartTime + " " + "08:00:00");  
  7.             Date endTime = format.parse(addEndTime + " " + "08:00:00");  
  8.             addBuffer = api.add(startTime, endTime, addCube);  
  9.         } catch (ParseException e) {  
  10.             logger.info(e.getMessage());  
  11.         }  
  12.         return addBuffer;  
  13.     }</span>  

⑦discard某个job

  1. <span style="font-family:Microsoft YaHei;font-size:14px;">public void discardJob(String jobId, String params) {  
  2.     api.discard(jobId, params);  
  3. }</span>  

⑧通过kylin查询

  1. <span style="font-family:Microsoft YaHei;font-size:14px;">  public StringBuffer testCubeQuery(String sql, String lookupId, String projectName) {  
  2.         StringBuffer timeBuf = new StringBuffer();  
  3.          timeBuf=api.getTableTime(sql,lookupId,projectName);  
  4.         return timeBuf;  
  5.     }</span>  

注:若kylin给出的Restful API对应没有params,均取null值。


3.参考文献

Kylin Java RESTful API

Apache kylin Resetful Api



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值