哈多普与乔布斯先生在壳牌上滚边



我有一个关于先生的问题。我正在使用一个 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发出的预定中断序列,例如仅由组成的"空白"行。

最新更新