我有一个关于先生的问题。我正在使用一个 hadoopcluster 超过 3 个数据节点,使用一个名称节点和一个工作跟踪器。从一个漂亮的示例应用程序开始,我写了类似以后
first_script.py:
for i in range(1,2000000):
print "My Line "+str(i)
这显然是在给 stdout 写一堆行辅助脚本是 mrjobs 映射器和化简器。从 unix (GNU) 调用我尝试过:
python first_script| python second_script.py -r hadoop
这是完成工作,但它正在将输入上传到hdfs完全。就在所有内容上传时,他正在开始第二份工作。所以我的问题是:是否可以强制流?(比如发送EOF?还是我弄错了整件事?
显然你早就忘记了这一点,但我还是会回答:不,不可能强制流。整个Hadoop编程模型是关于将文件作为输入和输出文件(并可能产生副作用,例如将相同的东西上传到数据库)。
如果您澄清要实现的目标,可能会有所帮助。但是,听起来您可能希望定期处理管道的内容,而不是等到流完成。 无法强制流。
管道的读取器(您的second_script.py
)需要将其标准分解为块,要么使用
- 固定数量的行,例如此问题和答案,或
- 非阻塞读取和预设的空闲期,或
- 从
first_script.py
发出的预定中断序列,例如仅由