我用hadoopapi编写了一个java程序。所以,java代码的输出是一个jar。。说foo.jar
在hadoop中运行jar,我需要
hadoop jar foo.jar org.foo.bar.MainClass input output
这就开始了一个很长的hadoop任务(比如说几分钟)。
作业正在运行时。。hadoop给了我进步。。喜欢
Map 0%, Reduce 0%
Map 20%, Reduce 0%
....
以此类推。。作业结束后,hadoop会吐出一堆统计数据(比如输入大小、拆分、记录等等)。。所有这些都是从命令行完成的。。
现在,我想做的是。。从python调用这个程序(使用简单的系统执行..)
但我想要的是。。当我运行这个python代码时。。我还想展示一些统计数据…但不是全部。。
所以,我要寻找的是一种捕获这些由jar执行显示的统计信息的方法,并在python中处理它,然后显示处理过的统计信息。。
例如..默认情况下,hadoop显示。。
Map 0%, Reduce 0%
Map 20%, Reduce 0%
...
以此类推。。
也许我所拥有的是。。。
def progress_function(map,reduce):
return sum([map,reduce])/2.0
我在命令提示符上显示。。
progress so far:0
progress so far:10
and so on..
长话短说。。我有一罐java程序。。当它被执行时会吐出一些数据。。我想从python运行这个java jar。。然后获取这些数据。。。然后在python中修改它们并向用户显示这些python统计信息。
1条答案
按热度按时间pqwbnv8z1#
出于多种原因,您希望使用壳管来解决此类问题。从设计Angular 来看,它更加灵活,从python调用进程可能会很尴尬,更重要的是,管道使python脚本在编程运行时很容易使用输出。
有
myscript.py
通过接收输入stdin
正常输出print
.请注意
2>&1
在shell中,命令将stderr重定向到stdout,因为管道从stdout而不是stderr移动输出。