想象一下这样一个场景,你有一个文本文件,其中有10000行,所以当你将它保存在HDFS中时它会非常小。现在,您的目标是在此小文件上运行map / reduce作业,期望文本文件的每一行都传递给映射器。但是,每个映射k,v的处理时间很长,并且您希望在集群上启动尽可能多的映射器以获得最大可能的并行性以最快完成映射作业。
因为文件很小,所以只能保存在一个或两个hdfs块中,我假设hadoop为作业配置的映射数量将等于hdfs块的数量恰好是一个或者二。但是,由于您希望尽可能多地启动映射器,因此这是不受欢迎的。这是我的问题?
答案 0 :(得分:1)
最佳方法是使用NLineInputFormat。根据文件NLineInputFormat which splits N lines of input as one split
。这种方法的结果是数据局部性丢失了,因为数据很小并不重要。