2017-10-29 91 views
0

我必须实现一个map-reduce作业循环。每次迭代将根据前一次迭代终止或继续。要做出的选择是基于“在减速器输出中出现一个词”。Reducer可以在Hadoop mapreduce中传递给驱动程序的消息吗?

当然,我可以用我的驱动程序检查整个输出txt文件。但它只是一个单词,并且通过整个文件将会矫枉过正。我正在考虑是否有任何方法来建立减速器和驱动程序之间的通信,一旦它检测到这个词,减速器可以通知驱动程序?由于要传输的消息很少。

+2

Mapreduce支持“计数器”的概念。或者,您可能想尝试使用Spark,以便将您正在构建到工作流而非循环中的“DAG任务” –

回答

-1

您的解决方案将不是一个干净的解决方案,难以维护。

有多种方法可以实现您的要求。

1. Reducer as soon as it finds a word writes to a HDFS location (opens file on hdfs predefine filedir and writes there) 
2. client keeps polling the predefined filedir/output dir of the job. If the output dir is found and there is no filedir it means word wasnt there. 
3. Use Zookeper 

最佳的解决方案是,只有当这个词被发现从映射器发出, 否则不会发出任何东西。这将加快你的工作,并产生一个单一的减速机。现在您可以安全地检查作业的输出是否有任何文件输出。使用惰性初始化,如果没有行到reducer没有输出文件将被创建

相关问题