2016-01-21 60 views
0

我可以修改驻留在hdfs上的文件吗?是唯一的方法来创建一个修改后的内容的临时文件,并放弃原始文件?使用mapreduce在hdfs上修改文件

我可以使用map-reduce修改文件吗?可以将不同的文件块并行修改,并以某种方式组合成单个文件?

回答

1

一旦文件处于HDFS中,除了附加到HDFS外,您无法修改它。看到这个答案,确认追加是可能的:

Append data to existing file in HDFS Java

地图降低可以让你在并行文件进行操作,每个映射器读取文件块,并同时运行许多映射器。这就是它的设计原理。

任何给定的映射器都可以对行进行过滤,并且可以很容易地将所有,部分或全部写入新文件。

如果您使用map-reduce写出修改后的文件,默认情况下它会显示为可根据您的要求组合成单个文件的文件目录。

+0

嗨,非常感谢您的回复。如何将输出文件合并到一个文件时确保输出序列化。我的意思是原始文件有块1的数据,接着是块2的数据,我的输出文件也应该有块1的数据,接着是块2的数据,但是每个块中的一些行被过滤掉了。这可能吗 ? – user2783058

+0

在地图缩小工作中,您将从1个文件开始,比如说10个块。一个进程将读取每个块,如果您只想过滤一些行并写出数据,则最终将在目录中包含10个文件,每个文件对应于您的原始10个块。这些文件将名称为00000至00010,我认为它们的顺序与原始块相同,但我不确定。如果每个块都可以独立处理,你关心哪个块是第一或第二块? –

+0

如果排序很重要,请使用一个reducer运行map-reduce作业并对其进行排序 - 然后您将有一个包含N个块和一个有保证的排序顺序的文件。 –