zoukankan      html  css  js  c++  java
  • Kylin Java RESTful API

      最近在做大数据方面的开发, 学习研究了一段时间的kylin系统, 对于前端开发需要使用 RESTful API ,但是官网并没有提供详细的Java  API. 经过几天的看文档,最终写出了 Java 的API,不敢私藏,特分享与大家.

      1 import java.io.BufferedReader;
      2 import java.io.InputStream;
      3 import java.io.InputStreamReader;
      4 import java.io.OutputStream;
      5 import java.net.HttpURLConnection;
      6 import java.net.URL;
      7 
      8 import org.apache.commons.codec.binary.Base64;  
      9 
     10 
     11 
     12 /**
     13  * 
     14  * @author HennSun  
     15  * www.shareideas.net
     16  * @Reference
     17  * http://kylin.apache.org/docs15/howto/howto_use_restapi.html#authentication
     18  *
     19  */
     20 public class KylinHttpBasic {
     21     
     22     private static String encoding;
     23     private static final String baseURL = "http://10.1.50.123:7070/kylin/api";
     24     public static String login(String user,String passwd){
     25         String method = "POST";
     26         String para = "/user/authentication";
     27         byte[] key = (user+":"+passwd).getBytes();
     28         encoding = new sun.misc.BASE64Encoder().encode(key);
     29         return  excute(para,method,null);
     30     }
     31 
     32     
     33     public static String listQueryableTables(String projectName){
     34          
     35         String method = "GET";
     36         String para = "/tables_and_columns?project="+projectName;
     37         
     38         return  excute(para,method,null);
     39         
     40     }
     41     
     42     
     43     /**
     44      * 
     45      * @param offset required int Offset used by pagination
     46      * @param limit required int Cubes per page.
     47      * @param cubeName optional string Keyword for cube names. To find cubes whose name contains this keyword.
     48      * @param projectName optional string Project name.
     49      * @return
     50      */
     51     public static String listCubes(int offset,
     52                                    int limit,
     53                                    String cubeName,
     54                                    String projectName ){
     55         String method = "GET";
     56         String para = "/cubes?offset="+offset
     57                             +"&limit="+limit
     58                             +"&cubeName="+cubeName
     59                             +"&projectName="+projectName;
     60         return excute(para,method,null); 
     61     }
     62     
     63     /**
     64      * 
     65      * @param cubeName  Cube name.
     66      * @return
     67      */
     68     public static String getCubeDes(String cubeName){
     69         String method = "GET";
     70         String para = "/cube_desc/"+cubeName;
     71         return excute(para,method,null); 
     72         
     73     }
     74     
     75     
     76     /**
     77      * 
     78      * @param cubeName
     79      * @return
     80      */
     81     public static String getCube(String cubeName){
     82         String method = "GET";
     83         String para = "/cubes/"+cubeName;
     84         return excute(para,method,null); 
     85         
     86     }
     87     
     88     
     89     
     90     /**
     91      * 
     92      * @param modelName Data model name, by default it should be the same with cube name.
     93      * @return
     94      */
     95     public static String getDataModel(String modelName){
     96         String method = "GET";
     97         String para = "/model/"+modelName;
     98         return excute(para,method,null);  
     99         
    100     }
    101 
    102     /**
    103      *  
    104      * @param cubeName cubeName Cube name.
    105      * @return
    106      */
    107     public static String enableCube(String cubeName){
    108         
    109         String method = "PUT";
    110         String para = "/cubes/"+cubeName+"/enable";
    111         return excute(para,method,null); 
    112         
    113     }
    114     
    115     /**
    116      * 
    117      * @param cubeName Cube name.
    118      * @return
    119      */
    120     public static String disableCube(String cubeName){
    121         
    122         String method = "PUT";
    123         String para = "/cubes/"+cubeName+"/disable";
    124         return excute(para,method,null); 
    125         
    126     }
    127     
    128     /**
    129      *  
    130      * @param cubeName Cube name.
    131      * @return
    132      */
    133     public static String purgeCube(String cubeName){
    134 
    135         String method = "PUT";
    136         String para = "/cubes/"+cubeName+"/purge";
    137         return excute(para,method,null); 
    138         
    139     }
    140     
    141     
    142     /**
    143      *  
    144      * @param jobId Job id
    145      * @return
    146      */
    147     public static String resumeJob(String jobId){
    148 
    149         String method = "PUT";
    150         String para = "/jobs/"+jobId+"/resume";
    151         return excute(para,method,null); 
    152         
    153     }
    154     
    155     
    156     /**
    157      * startTime - required long Start timestamp of data to build, e.g. 1388563200000 for 2014-1-1
    158      * endTime - required long End timestamp of data to build
    159      * buildType - required string Supported build type: ‘BUILD’, ‘MERGE’, ‘REFRESH’
    160      * @param cubeName  Cube name.
    161      * @return
    162      */
    163     public static String buildCube(String cubeName,String body){
    164         String method = "PUT";
    165         String para = "/cubes/"+cubeName+"/rebuild";
    166         
    167         return excute(para,method,body); 
    168     }
    169     
    170     
    171     /**
    172      * 
    173      * @param jobId  Job id.
    174      * @return
    175      */
    176     public static String discardJob(String jobId){
    177 
    178         String method = "PUT";
    179         String para = "/jobs/"+jobId+"/cancel";
    180         return excute(para,method,null); 
    181         
    182     }
    183     
    184     /**
    185      * 
    186      * @param jobId  Job id.
    187      * @return
    188      */
    189     public static String getJobStatus(String jobId){
    190 
    191         String method = "GET";
    192         String para = "/jobs/"+jobId;
    193         return excute(para,method,null); 
    194         
    195     }
    196     
    197     /**
    198      * 
    199      * @param jobId Job id.
    200      * @param stepId  Step id; the step id is composed by jobId with step sequence id; 
    201      * for example, the jobId is “fb479e54-837f-49a2-b457-651fc50be110”, its 3rd step id 
    202      * is “fb479e54-837f-49a2-b457-651fc50be110-3”,
    203      * @return
    204      */
    205     public static String getJobStepOutput(String jobId,String stepId){
    206         String method = "GET";
    207         String para = "/"+jobId+"/steps/"+stepId+"/output";
    208         return excute(para,method,null); 
    209     }
    210     
    211     /**
    212      * 
    213      * @param tableName table name to find.
    214      * @return
    215      */
    216     public static String getHiveTable(String tableName){
    217         String method = "GET";
    218         String para = "/tables/"+tableName;
    219         return excute(para,method,null); 
    220     }
    221     
    222     /**
    223      * 
    224      * @param tableName  table name to find.
    225      * @return
    226      */
    227     public static String getHiveTableInfo(String tableName){
    228         String method = "GET";
    229         String para = "/tables/"+tableName+"/exd-map";
    230         return excute(para,method,null); 
    231     }
    232     
    233 
    234     /**
    235      * 
    236      * @param projectName will list all tables in the project.
    237      * @param extOptional boolean set true to get extend info of table.
    238      * @return
    239      */
    240     public static String getHiveTables(String projectName,boolean extOptional){
    241         String method = "GET";
    242         String para = "/tables?project="+projectName+"&ext="+extOptional;
    243         return excute(para,method,null); 
    244     }
    245     
    246     
    247     /**
    248      * 
    249      * @param tables  table names you want to load from hive, separated with comma.
    250      * @param project the project which the tables will be loaded into.
    251      * @return
    252      */
    253     public static String loadHiveTables(String tables,String project){
    254         String method = "POST";
    255         String para = "/tables/"+tables+"/"+project;
    256         return excute(para,method,null); 
    257     }
    258     
    259     /**
    260      * 
    261      * @param type ‘METADATA’ or ‘CUBE’
    262      * @param name  Cache key, e.g the cube name.
    263      * @param action ‘create’, ‘update’ or ‘drop’
    264      * @return
    265      */
    266     public static String wipeCache(String type,String name,String action){
    267         String method = "POST";
    268         String para = "/cache/"+type+"/"+name+"/"+action;
    269         return excute(para,method,null); 
    270     }
    271     
    272     
    273     public static String query(String body){
    274         String  method = "POST";
    275         String para = "/query";
    276         
    277         return excute(para,method,body);
    278     }
    279     
    280     
    281     
    282     private  static String excute(String para,String method,String body){
    283     
    284         StringBuilder out = new StringBuilder();
    285         try {
    286             URL url = new URL(baseURL+para);        
    287             HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    288             connection.setRequestMethod(method);   
    289             connection.setDoOutput(true);
    290             connection.setRequestProperty  ("Authorization", "Basic " + encoding);
    291             connection.setRequestProperty("Content-Type","application/json");         
    292             if(body !=null){
    293                 byte[] outputInBytes = body.getBytes("UTF-8");
    294                 OutputStream os = connection.getOutputStream();
    295                 os.write(outputInBytes);    
    296                 os.close();
    297             }
    298             InputStream content = (InputStream)connection.getInputStream();  
    299             BufferedReader in  = new BufferedReader (new InputStreamReader (content)); 
    300             String line;
    301             while ((line = in.readLine()) != null) {
    302                 out.append(line);
    303             }
    304             in.close();
    305             connection.disconnect();
    306             
    307         } catch(Exception e) {
    308             e.printStackTrace();
    309         }
    310         return out.toString();
    311     }
    312 }

    参考:

    http://kylin.apache.org/docs15/howto/howto_use_restapi.html#authentication

  • 相关阅读:
    LeetCode 461. Hamming Distance
    LeetCode 442. Find All Duplicates in an Array
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode Find the Difference
    LeetCode 415. Add Strings
    LeetCode 445. Add Two Numbers II
    LeetCode 438. Find All Anagrams in a String
    LeetCode 463. Island Perimeter
    LeetCode 362. Design Hit Counter
    LeetCode 359. Logger Rate Limiter
  • 原文地址:https://www.cnblogs.com/dreamfactory/p/5588203.html
Copyright © 2011-2022 走看看