我已经使用Hadoop(HDFS,HBASE,MAPREDUCE)
和java开发了二进制引擎,用于生成CSV文件。此引擎执行了一些操作,例如HBASE中的表创建以及从此HBASE生成CSV文件。但是这个引擎只通过命令行执行所有操作,因为输入是以命令的形式从Linux终端给出的。现在我的要求是通过java程序连接这个Linux终端并运行命令但是我无法成功运行任何命令
我尝试了两个选项,但没有一个成功。请提供解决此问题的任何建议或解决方案,因为我只是初学Linux和hadoop来解决问题
第一单向
public class EngineTest {
public static void main(String[] args) {
try {
Process process = Runtime
.getRuntime()
.exec("/home/cloudera/PVGproto/Base/ anloss -i ${TOOL_INPUT}/census_10000_col5.csv -d ${TOOL_DEF}/attr_all_def.txt -q k=14,dage=2 -g ${TOOL_RES}/census_100_col8_gen.csv");
process.waitFor();
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line = "";
String output = "";
while ((line = bufferedReader.readLine()) != null) {
output += line + "\n";
}
System.out.println(output);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
第二路
我创建了一个ex.sh
文件,在这个文件中我把所需的命令执行并从同一个java程序调用这个. sh
文件,但同样的事情发生了它没有通过java程序运行命令
Process process = Runtime.getRuntime().exec("/home/cloudera/PVGproto/Base/ex.sh");
但如果我从Linux终端运行相同的ex.sh,它会成功运行所有命令。
ex.sh
# !/bin/bash
exec /home/cloudera/PVGproto/Base/ anloss -i ${TOOL_INPUT}/census_10000_col5.csv -d ${TOOL_DEF}/attr_all_def.txt -q k=14,age=2 -g ${TOOL_RES}/census_100_col8_gen.csv
echo command run successfully