Reducer可以在Hadoop mapreduce中传递给驱动程序的消息吗?
问题描述:
我必须实现一个map-reduce作业循环。每次迭代将根据前一次迭代终止或继续。要做出的选择是基于“在减速器输出中出现一个词”。Reducer可以在Hadoop mapreduce中传递给驱动程序的消息吗?
当然,我可以用我的驱动程序检查整个输出txt文件。但它只是一个单词,并且通过整个文件将会矫枉过正。我正在考虑是否有任何方法来建立减速器和驱动程序之间的通信,一旦它检测到这个词,减速器可以通知驱动程序?由于要传输的消息很少。
答
您的解决方案将不是一个干净的解决方案,难以维护。
有多种方法可以实现您的要求。
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没有输出文件将被创建
Mapreduce支持“计数器”的概念。或者,您可能想尝试使用Spark,以便将您正在构建到工作流而非循环中的“DAG任务” –