fe 创建文件 20bytes。
第一个进程将写入从 0 到 4
第二个从 5 到 9
等等
我需要这个来使用我的 MapReduce 并行创建一个大文件。
谢谢。
PS也许它还没有实现,但一般来说是可能的 - 请指出我应该挖掘的地方。
您能否解释一下您在创建此文件后打算如何处理它。
如果您需要将其从 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,不要重新发明轮子。