2017-03-02 54 views

回答

0

您不能在HDFS中的单个块内存储多个文件,这是HDFS的基本规则。在你的情况下,HDFS块的使用效果不好,总共128MB的块中只有10MB被使用,其余的118MB不能被任何其他文件使用,并且它将保持空闲状态。 (这里要注意的一点是,HDFS块是逻辑的,你的HDFS块只需要10MB的物理存储空间,尽管你已经设置为128MB)。到许多HDFS块到文件不能是一对多的。

+1

你可以简单地写一个包含每个文件作为记录的序列文件。 –

+0

是的,否则你可以先加载到临时表(如果文件在s3中,你可以创建一个外部表),然后插入你的核心表。 – MikA

0

首先你不能以这种方式存储(16个HDFS块)。

为了为这些文件产生大约16个映射器,可以使用CombileFileInputFormat,这样它就会合并文件直到满足提供的限制。 (在边界情况下不同)。

需要指定: - mapreduce.input.fileinputformat.split.maxsizemapreduce.input.fileinputformat.split.minsize

1

最好的办法是改变你的过程,写到HDFS保存一个等于(或)近似等于块大小的文件。这将确保您正在优化块大小,并且在Hadoop集群上执行任何作业时,它将启动等于块或分割的地图任务数量。

如果输入数据集太大,一种理想的方法是进一步压缩数据,然后保存在HDFS中。这将减少集群中保存的数据的占用空间,并提高读取数据的作业性能。

相关问题