我在微软hdinsight工作的Map只有先生的工作是基于hortonworks。我的输入数据大约是1gb,块大小是128mb。
当我在没有设置分割大小的情况下运行作业时,我的输入数据被分割成两个分割,Map任务的数目也是2。这需要很长时间,所以我想通过增加map任务的数量来加快这个过程。
我通过设置值 mapreduce.input.fileinputformat.split.minsize
以及 mapreduce.input.fileinputformat.split.minsize
.
首先,我设置我的分裂数为8,这项工作所消耗的时间是35分钟。然后我把它设为16和64,消耗的时间分别是21分钟和16分钟。
但是当我将splits设置为128时,这个任务所消耗的时间从16分钟增加到了18分钟。
我的问题:
1:为什么Map任务越多,时间就越长?我知道示例化map类需要一些时间,但是还有其他原因吗?
2:有没有办法决定最合适的分割尺寸?
谢谢ps:我的输入文件是没有“.txt”的文本文件。
1条答案
按热度按时间yks3o0rb1#
时间增加的原因是您提到的更多Map任务。Map器的数量和inputsplit大小之间总是有一个平衡点。
在您的例子中,在jvm中示例化Map器类可能比Map器中的逻辑花费更多的时间。还有一个原因可能是集群中的资源不可用,无法启动Map程序。其中一些会等到您当前的任务/Map程序完成,然后再示例化。
我建议只通过Map器发送数据,将textinputformat中的还原数设为0。然后它写入x个文件,每个文件的大小都与您输入的大小相同。