這裏所說的在Java中執行Hive命令或HiveQL並不是指Hive Client通過JDBC的方式連接HiveServer(or HiveServer2)執行查詢,而是簡單的在部署了HiveServer的服務器上執行Hive命令。當然這是一個簡單的事情,平常我們通過Hive做簡單的數據分析實驗的時候,都是直接進入Hive執行HiveQL,那我們爲什麼還要在程序中執行呢?
這裏涉及到了一個問題,通過進入Hive執行HiveQL,我們只能將分析結果打印到屏幕或是存入臨時表,那如果我們想吧分析結果寫入文件,或者我們想對分析結果做進一步的分析,用程序做分析,該怎麼辦?這就是爲什麼要在Java中執行Hive命令。
Java在1.5過後提供了ProcessBuilder根據運行時環境啓動一個Process調用執行運行時環境下的命令或應用程序(1.5以前使用Runtime),關於ProcessBuilder請參考Java相關文檔。調用代碼如下:
String sql="show tables; select * from test_tb limit 10";
List<String> command = new ArrayList<String>();
command.add("hive");
command.add("-e");
command.add(sql);
List<String> results = new ArrayList<String>();
ProcessBuilder hiveProcessBuilder = new ProcessBuilder(command);
hiveProcess = hiveProcessBuilder.start();
BufferedReader br = new BufferedReader(new InputStreamReader(
hiveProcess.getInputStream()));
String data = null;
while ((data = br.readLine()) != null) {
results.add(data);
}
其中command可以是其它Hive命令,不一定是HiveQL。
本文產生於個人工作學習筆記,轉載請註明出處http://blog.csdn.net/horace20