如何在 Java 中执行 Hive 命令或 HiveQL
2018-06-28 本文已影响41人
数据小白鼠
背景
对导入数仓的数据和导入前的文件数据进行验证,尝试采用如下方式。
说明
- 这里所说的在 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);
Process 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。