gpt4 book ai didi

java - 从 Java 执行 Hive 查询

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:50:35 25 4
gpt4 key购买 nike

我试图从 Java 执行一个小的 hive 查询,但它失败并出现以下错误,bur 当我复制相同的查询并在它给出的终端上运行时我的结果。

谁能帮我解决这个问题。

Java 代码:

Runtime.getRuntime().exec("hive -e 'show databases;'");

抛出的错误:

FAILED: ParseException line 1:5 cannot recognize input near '<EOF>' '<EOF>' '<EOF>' in ddl statement

问候,GHK.

最佳答案

我已经处理这个 Java 问题一段时间了,我相信我已经解决了这个问题。基本上你失败的原因是因为环境变量没有正确设置。将以下内容放入您的 /home/<username>/.bash_profile文件并重新启动您的机器以解决此问题。

HIVE_HOME=/usr/lib/hive

export HIVE_HOME

PATH=$PATH:$HIVE_HOME/bin/hive

export PATH

这将确保它们得到正确设置。

然而,虽然这会消除错误,但它仍然不会向您显示数据库列表,因为运行 hive 命令的进程将在后台运行,而不是在运行主程序的控制台上运行。以下代码可让您将程序的输出重定向到运行主程序的控制台。

package testing.console;

import java.io.IOException;
import java.lang.ProcessBuilder;
import java.util.Map;

import testing.console.OutputRedirector;

//This Works

public class ConsoleTester {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {

ProcessBuilder hiveProcessBuilder = new ProcessBuilder("hive", "-e",
"show databases");
String path = processEnv.get("PATH");
Process hiveProcess = hiveProcessBuilder.start();

OutputRedirector outRedirect = new OutputRedirector(
hiveProcess.getInputStream(), "HIVE_OUTPUT");
OutputRedirector outToConsole = new OutputRedirector(
hiveProcess.getErrorStream(), "HIVE_LOG");

outRedirect.start();
outToConsole.start();
}

}

OutputRedirector 类用于将输出发送到控制台。

package testing.console;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class OutputRedirector extends Thread {

InputStream is;
String type;

public OutputRedirector(InputStream is, String type){
this.is = is;
this.type = type;
}
@Override
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(type + "> " + line);
}
} catch (IOException ioE) {

}
}

}

关于java - 从 Java 执行 Hive 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19379223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com