2011-12-27 34 views
2

我想知道: 如果同一个作业提交两次,hadoop mapreduce是否会重新处理整个数据集? 例如:单词计数示例计算输入文件夹中每个文件中每个单词的出现次数。 如果我要将文件添加到该文件夹​​,并重新运行字数mapreduce作业,初始文件是否会被重新读取,重新配置和重新还原?Hadoop mapreduce是否重新处理整个数据集

如果是这样,有没有办法配置hadoop来处理新文件并将其添加到以前的mapreduce运行的“摘要”中。

任何想法/帮助将不胜感激。

+0

谢谢大家的帮助!所以我想答案在于设计系统是正确的。再次感谢大家的帮助。 – uri 2011-12-28 06:41:42

回答

3

如果我要为该文件夹添加一个文件,并重新运行字数mapreduce作业,初始文件是否会被重新读取,重新配置和重新还原?

Hadoop将在再次运行时重新处理整个数据。作业成功完成后,映射器的输出和临时数据将被删除。

如果是这样,是否有配置hadoop来处理新文件并将其添加到以前的mapreduce运行的“摘要”的方法。

的Hadoop作为,是如方案不支持,但你可以写一个检查未处理或新的文件和一个对自定义OUTPUTFORMAT将数据从先前的运行添加到总结的自定义InputFormat。否则,一旦作业已经运行,要处理的新文件可以放在不同的输入文件夹中,让作业仅处理新文件夹中的文件。

检查此article创建自定义输入/输出格式。

我不确定具体的要求,但您也可以考虑处理数据流的框架,如HStreaming,S4,Twitter Storm等。

0

我同意Praveen所说的一切。我将提供一个特定的方法,我亲自在集群上处理这个问题。


当我将文件压入HDFS时,我根据系统时钟将它们放入文件夹中。

$ hadoop fs -put thisfile1249.txt /tmp/ 
$ hadoop fs -mv /tmp/thisfile1249.txt `date "+/data/%Y/%m/%d/%H/%M/"` 

让我们来看看有什么路径将会是什么样:

$ echo `date "+/data/%Y/%m/%d/%H/%M/"` 
/data/2011/12/27/09/49/ 

这意味着,当文件被进来的时候,他们会去到该文件夹​​按分钟。由于时间单调递增,当您运行一个文件夹时,您知道您不必再返回并再次运行该文件夹。如果您想每小时运行一次作业,则可以将输入路径指向/data/2011/12/27/08。每天将会是/data/2011/12/26等。

0

Hadoop本身并不支持其他人提到的部分数据运行。您可以获得所需的功能如果您使用HBase作为map-reduce的源并通过适当的过滤器进行扫描(例如,时间戳大于上次运行)

相关问题