最近在做大数据方面的开发, 学习研究了一段时间的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 = Base64.encodeBase64String(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 }