在每个作业后的HDFS处理中,使用part-m-0000 *之类的名称创建空文件。这些文件中的每一个都是空的,但是它们占用了64MB的磁盘空间,因为这是块的默认大小。
必须更改代码才能跳过这些文件的创建。我该怎么做?
注意:我使用org.apache.hadoop.mapreduce.lib.output.MultipleOutputs<KEYOUT,VALUEOUT>
来编写输出记录,而不是上下文,所以我总是在“success-m-00000”等文件中输出输出记录。
答案 0 :(得分:1)
根据Hadoop : The Definitive Guide,如果文件为空,则基础文件系统不会采用HDFS块大小。
与单个磁盘的文件系统不同,HDFS中小于单个块的文件不会占用整个块的底层存储空间。
要禁止输出文件为空,请使用LazyOutputFormat#setOutputFormatClass。这是同样的Apache documentation。