java—在mapreduce中修改Map器大小(拆分大小)以获得更快的性能

lvjbypge  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(269)

有没有办法通过更改Map任务的数量或更改每个Map器的拆分大小来提高mapreduce的性能?例如,我有一个100gb的文本文件和20个节点。我想在文本文件上运行wordcount作业,理想的Map器数量是多少,或者理想的拆分大小是多少,这样可以更快地完成?
有更多的Map绘制者会更快吗?用较小的分割尺寸会更快吗?
编辑
我使用的是hadoop2.7.1,只是想让您知道其中有一些问题。

vxf3dgd4

vxf3dgd41#

当您使用更多的Map器时,它不一定会更快。每个Map器都有一个启动和设置时间。在hadoop的早期,mapreduce是事实上的标准,据说mapper应该运行10分钟。今天的纪录片推荐1分钟。可以通过使用更改Map任务的数量 setNumMapTasks(int) 可以在jobconf中定义。在该方法的文档中有关于Map器计数的非常好的信息:
有多少张Map?
Map的数量通常由输入的总大小驱动,即输入文件的总块数。
Map的正确并行级别似乎是每个节点10-100个Map,尽管对于非常cpu的光照Map任务,它已经设置为300个左右。任务设置需要一段时间,因此最好至少花一分钟执行Map。
基于文件的输入格式的默认行为是根据输入文件的总大小(以字节为单位)将输入拆分为逻辑输入拆分。但是,输入文件的文件系统块大小被视为输入拆分的上限。拆分大小的下限可以通过mapreduce.input.fileinputformat.split.minsize设置。
因此,如果预期输入数据为10tb,块大小为128mb,则最终将得到82000个Map,除非使用setnummaptasks(int)将其设置得更高。
你的问题可能和这个问题有关。
老实说,试着看看现代的框架,比如apachespark和apacheflink。

相关问题