假设有一个文本文件包含10000行的情况,因此将其保存在HDFS中时,它会很小。现在,您的目标是在此小文件上运行映射/归约作业,希望文本文件的每一行都传递给映射器。但是,每个映射k,v的处理时间很长,您想在集群上启动尽可能多的映射器,以获取最大可能的并行度,从而尽快完成映射作业。
因为文件很小,所以它只能保存在一个或两个hdfs块中,并且我假设hadoop为该作业准备的映射数将等于恰好是一两个的hdfs块数。但这是不希望的,因为您要启动尽可能多的映射器。这是我的问题吗?
最佳答案
最好的方法是使用NLineInputFormat。根据文档NLineInputFormat which splits N lines of input as one split
。这种方法的缺点是丢失了数据局部性,因为数据很小,这无关紧要。
关于hadoop - 在小型HDFS文件上长时间运行的 map task ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9105260/