从shell定义了hadoop命令,只是尝试进行正常处理:
shell文件如下:
#!/bin/bash
success = $?
echo " The hadoop execution started at " $(date) ;
echo " Processing the files ";
echo "Starting the process for mapping file to HDFS and then to mysql"
hadoop fs -rm -r -f /FileMappingData &&
hadoop fs -put /home/nishant/data/mappingfile/ /FileMappingData &&
mysql -u root -padmin -e 'use MiningProcessSchema;drop table if exists MiningMasterData;create table MiningMasterData (PointID VARCHAR(20), PointX int, PointY int, FileName VARCHAR(80));' &&
echo "Table created in mysql" &&
if [ "$?" = "0" ] ; then
echo "Process success"
else
echo "------------!!!!!Something wrong !!Process failed!!!!------------";
fi
从终端执行时这很好。什么时候,现在我试图从java代码调用shell。虽然没有被召唤。
StringBuffer output = new StringBuffer();
Process p,p1;
try {
String[] envp= {"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/nishant/bin:/usr/local/java/jdk1.8.0_66/bin:/home/nishant/bin:/usr/local/java/jre1.8.0_66/bin:/usr/lib/jvm/java-7-openjdk-amd64/bin:/usr/local/hadoop/bin:/usr/local/hadoop/sbin:/usr/local/hive/bin:/usr/lib/sqoop/bin"};
p1 = Runtime.getRuntime().exec("bash exec bash");
p1.waitFor();
p = Runtime.getRuntime().exec( command, envp );
// " > " + prop.getProperty("LOGDIR_PROCESS_DATA")+ sdfRec.format(new Date())
// +collectNextVal+".log 2>&1 &"
//Runtime.getRuntime().
p.waitFor();
BufferedReader reader =
new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine())!= null) {
output.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
输出:
hadoop执行于2015年12月19日星期六14:19:23开始 处理文件启动将文件映射到HDFS的过程 然后到mysql 111 ------------ !!!!!出错了!过程失败!!!! ------------
似乎主要是在java执行中没有访问PATH变量的问题,但不确定我可以添加它的位置。
如果是这种情况或任何其他情况,请提供帮助。
提前致谢。
答案 0 :(得分:1)
得到答案并立即成功运行代码。
诀窍是要正确包含Path
变量:
String [] envp = {“PATH = / usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / games:/ usr /本地/游戏:/首页/ NISHANT /斌:/usr/local/java/jdk1.8.0_66/bin:/家庭/ NISHANT /斌:/usr/local/java/jre1.8.0_66/bin:/ usr / lib目录/ JVM / JAVA -7-的openjdk-AMD64 / bin中:在/ usr /本地/ hadoop的/ bin中:在/ usr /本地/ hadoop的/ sbin目录:在/ usr /本地/蜂巢/ bin中:/ usr / lib中/ sqoop / BIN“} ;
它有效。