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



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

我需要它来使用我的MapReduce并行创建一个大文件。

谢谢。

附言也许它还没有实现,但总的来说是可能的 - 请指出我应该挖掘的地方。

您能否解释创建此文件后计划如何处理该文件。

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

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

Web 下载器在多个线程中使用 Range HTTP 标头请求文件的某些部分,然后在稍后将这些部分合并在一起之前使用 tmp 文件(如 Thomas Jungblut 建议的那样),或者他们可能能够使用随机 IO,在将它们写到正确位置的输出文件之前将下载的部分缓冲在内存中。不幸的是,你没有能力使用Hadoop HDFS执行随机输出。

我认为简短的答案是否定的。实现此目的的方法是将多个"初步"文件写入 hadoop,然后将它们 M/R 写入单个合并文件。 基本上,使用hadoop,不要重新发明轮子。

最新更新