我使用Runtime.getRuntime().exec()
方法运行命令,当我拨打Process.waitFor()
时,我收到退出代码11。
当我在控制台上运行相同的命令时,它按预期运行。
命令是: hive -hiveconf mapred.map.child.java.opts = -Xmx2048M -hiveconf mapred.job.shuffle.input.buffer.percent = 0.30 -hiveconf io.sort.factor = 25 -hiveconf io.sort.mb = 256 -hiveconf mapred.job.reuse.jvm.num.tasks = 500 -hiveconf mapred.job.priority = VERY_LOW -e从my_table中选择site_id,count(session_id),其中day ='20111017'group by site_id;
我在Unix机器上运行。
知道为什么吗?什么是退出代码11?
答案 0 :(得分:1)
退出代码由您调用的程序设置。没有唯一的定义,除了0
通常没有错误,其他任何表示错误。错误代码因程序而异,某些程序无需设置错误代码。
System.exit(n);
是将退出代码设置为n
的Java方法(整数值)。那么,什么时候“你”使用System.exit(11);
?那你有答案......
答案 1 :(得分:1)
Process.waitFor()
阻塞该线程,直到收到分叉子进程的退出代码。在您的情况下,此退出代码11
取决于外部命令。请查看外部命令的手册页。
答案 2 :(得分:0)
要解决此问题,我将命令更改为:
hive -hiveconf mapred.map.child.java.opts = -Xmx2048M -hiveconf mapred.job.shuffle.input.buffer.percent = 0.30 -hiveconf io.sort.factor = 25 -hiveconf io.sort.mb = 256 -hiveconf mapred.job.reuse.jvm.num.tasks = 500 -hiveconf mapred.job.priority = VERY_LOW -f filename;
如您所见,我将-e查询更改为-f filename。