2013-05-02 35 views
4

我知道在Hadoop中,大输入文件分割成小文件,并通过映射函数在不同节点中处理。我也知道我们可以定制InputSplit。我想知道的是,如果InputSplit可以进行以下类型的自定义:Hadoop中的输入分割定制

我有一个大的输入文件进入Hadoop,我想要一个文件的子集,即文件中的一组行跟随每个输入分割。我的意思是大文件的所有数据块都应该包含这些行,不管文件分裂的方式如何。

为了使我的问题更加清晰,东西一样,如果我们需要比较与该文件内容的其余部分输入文件的一部分(比如A),在这种情况下,所有InputSplit S中的要去map功能需求有这A部分与它进行比较。 请在此引导我。

回答

1

理论上可以将您的大文件(A, B, C, D, ...)拆分为拆分(A, B), (A, C), (A, D), ...。但是,您必须为此编写大量自定义类。目前FileSplit(其延伸InputSplit)基本上表示file的分割开始于位置start并且具有固定的length。对文件的实际访问由RecordReader完成,即LineRecordReader。所以你必须实现代码,它不仅会读取实际的分割,还会读取文件的头文件(部分A)。

我认为,你正在寻找的方法是不切实际的。记录阅读器仅访问位置(开始,开始+长度)的原因是数据局部性。对于非常大的文件,零件AZ将位于两个不同的节点上。

取决于部分A的大小,更好的想法是将该公共部分存储在DistributedCache中。通过这种方式,您可以高效地访问每个映射器中的公共数据。有关更多信息,请参阅javadoc和http://developer.yahoo.com/hadoop/tutorial/module5.html#auxdata

0

这里是我简单探讨Hadoop MapReduce的工作原理。

假设你有一副扑克牌,我们想按照套装顺序排序,然后按顺序排列,就像当你买到一个全新的套牌一样。

的Hadoop与1映射/ 1减速

你把甲板上,为了它自己

的Hadoop与1映射/ 2减速齿轮(将映射基于颜色,2种颜色,2个减速)

你拿着套牌,给我所有的黑卡和其他所有的红卡。我点了我的名片给他们,他也这样做。你把2放在一起。

的Hadoop与2映射器/ 4减速齿轮(要根据西装地图)

你和我一半的甲板分裂甲板。我们每个人都把我们的套牌分成4堆。每个人都会穿上西装并订购。 4堆将返回,最后一步将它们分类为我们想要的。

所以是的,“减速器”部分中的所有数据都必须有一些常见的部分,这是您基于的映射部分。可能映射的东西是白天,或在我的情况下,通过颜色或西装。

+0

这与OP有关输入分割和文件开始处常见数据的问题有何关系? – harpun 2013-05-02 15:27:33

+0

我不确定OP的MR系统知识。想象一下,根据OP – 2013-05-03 00:56:37

+0

的任何反馈,我们将开始真正的基础并从那里开始构建。感谢以示例形式给出的解释MR。但是,我一直在寻找有关harpun提供了概述的InputSplit问题。 – 2013-05-03 03:00:17