hadoop / HDFS:是否可以从多个进程写入同一个文件?

时间:2012-08-09 11:39:39

标签: hadoop hdfs

f.e。创建文件20bytes 第一个过程将从0写入4 从5到9的第2位 等

我需要使用MapReduce并行创建大文件。

感谢。

P.S。也许它还没有实现,但总的来说可能 - 指出我应该在哪里挖掘。

2 个答案:

答案 0 :(得分:3)

您是否能够在创建文件后解释您打算对此文件执行的操作。

如果您需要将其从HDFS中取出然后使用它,那么您可以让Hadoop M / R创建单独的文件,然后使用像hadoop fs -cat /path/to/output/part* > localfile这样的命令将这些部分组合到一个文件中并保存到本地文件系统。

否则,你无法让多个写入者打开同一个文件 - 读取和写入HDFS是基于流的,虽然你可以打开多个读取器(可能读取不同的块),但是不能进行多次写入。

Web下载程序在多个线程中使用Range HTTP header请求文件的一部分,然后在将这些部分合并到一起之前使用tmp文件(如Thomas Jungblut建议的那样),或者他们可能能够使用Random IO,将下载的部分缓冲到内存中,然后将它们写入正确位置的输出文件。遗憾的是,您无法使用Hadoop HDFS执行随机输出。

答案 1 :(得分:0)

我认为简短的回答是否定的。您完成此操作的方法是将多个“初步”文件写入hadoop,然后将它们M / R转换为单个合并文件。基本上,使用hadoop,不要重新发明轮子。