2011-01-18 68 views
1

我想在HDFS中创建一个文件,其中有一堆线,每个线都由不同的地图调用生成。我不在乎线的顺序,只是将它们全部添加到文件中。我该如何做到这一点?如何附加到hadoop中的文件?

如果这是不可能的,那么是否有一种标准的方法来生成独特的文件名,以将每行输出放入单独的文件中?

回答

1

目前没有办法在hadoop中追加到现有的文件,但这不是你想要做的事情。这听起来像你想从Map Reduce作业输出到单个文件,这是很有可能的。输出文件的数量是(小于或等于)缩减器的数量,所以如果将缩减器的数量设置为1,则会得到单个文件的输出。

然而,在你去做那件事之前,想想这是你真正想要的。您将在您的管道中创建一个瓶颈,以便将所有数据通过单台机器传递,从而减少这些瓶颈。在HDFS分布式文件系统中,具有一个文件和多个文件的区别非常明显。如果您想在群集外部使用单个文件,则最好从文件系统工具中使用getmerge

+1

这个答案是错误的。过去两个版本中HDFS-200已包含在CDH3中,HDFS-265包含在Apache Hadoop 0.21中。 – 2011-02-03 21:35:43

1

您的地图和减少功能都应该输出线。换句话说,你的reduce函数是一个并不多的传递函数。将减速器的数量设置为1.输出将是一个文件中所有行的列表。