0

我有一个关于 mrjob 的问题。我使用一个名称节点和一个作业跟踪器在 3 个数据节点上使用 hadoopcluster。从一个漂亮的示例应用程序开始,我写了如下内容

first_script.py: 
        for i in range(1,2000000): 
                 print "My Line "+str(i) 

这显然是在向 stdout 写入一堆行,辅助脚本是 mrjobs Mapper 和 Reducer。我尝试从 unix (GNU) 调用:

python first_script| python second_script.py   -r hadoop 

这完成了工作,但它正在将输入完全上传到 hdfs。就在所有内容都上传完毕后,他开始了第二份工作。所以我的问题是:是否可以强制流?(比如发送 EOF?)还是我弄错了整个事情?

4

2 回答 2

0

显然你早就忘记了这一点,但我还是会回复:不,不可能强制流。整个 hadoop 编程模型是关于将文件作为输入和输出文件(并可能产生副作用,例如将相同的东西上传到数据库)。

于 2012-07-09T19:23:18.000 回答
0

如果您澄清了您想要实现的更多目标,这可能会有所帮助。但是,听起来您可能希望定期处理管道的内容,而不是等到流完成。流不能被强制。

管道的阅读器(您的second_script.py)需要将其标准输入分成块,或者使用

于 2017-09-27T01:50:53.333 回答