使用Hadoop通过一次运行“存储”数据

时间:2010-12-07 20:48:02

标签: hadoop mapreduce

是否可以使用一个 Hadoop作业运行来根据密钥将数据输出到不同的目录?

我的用例是服务器访问日志。说我把它们放在一起,但我想根据一些常见的URL模式将它们分开。

例如,

  • 以/ foo /开头的任何内容都应该转到/ year / month / day / hour / foo / file
  • 以/ bar /开头的任何内容都应该转到/ year / month / day / hour / bar / file
  • 任何不匹配的内容都应转至/年/月/日/小时/其他/文件

这里有两个问题(根据我对Map Reduce的理解):首先,我宁愿只迭代一次我的数据,而不是按照我想要匹配的URL类型运行一个“grep”作业。但是,如何分割输出呢?如果我用“foo”键入第一个,用“bar”键入第二个,用“other”键入,那么它们是否仍然使用相同的reducer?如何告诉Hadoop将它们输出到不同的文件中?

第二个问题是相关的(可能相同?),我需要通过访问日志行中的时间戳来打破输出。

我应该注意到,我不是在寻找解决这个问题的代码,而是寻找适当的术语和高级解决方案。如果我必须使用多次运行,那没关系,但我不能为每个可能的小时运行一个“grep”(为那个小时制作一个文件),必须有另一种方式吗?

1 个答案:

答案 0 :(得分:1)

您需要按照描述对数据进行分区。然后你需要有多个输出文件。见这里(Generating Multiple Output files with Hadoop 0.20+)。