Hadoop MapReduce处理来自HDFS的不同输入文件

时间:2013-10-22 15:51:17

标签: java hadoop mapreduce

我正在编写一个Java MapReduce程序。例如,我有两个文件在HDFS中。我的程序将从HDFS读取这两个文件,在两个文件中找到相同的行并输出结果。 e.g:

a.log:
  apple
  computer
  bird
b.log:
  steve
  pear
  apple

最终输出应为

apple

我该怎么做?我首先尝试读取a.log并将其存储到哈希集中,但它不起作用,因为tasktrackers无法彼此共享内存。有谁有想法?或者Hadoop MapReduce没有这种OOTB?

1 个答案:

答案 0 :(得分:0)

您正尝试在两个文件上实施加入操作。您可以通过编写发出(word,filename)对的映射器来完成此操作。在reducer中,检查两个文件名是否都在发出之前的值中。您可以通过从InputSplit 中获取路径来获取文件名。

在“实践中的Hadoop”一书中对此进行了描述,如果您打算通过hadoop进行更严肃的考虑,建议阅读。

如果这个答案有帮助,请标记为已回答。