Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在MapReduce中修改映射器大小(拆分大小)以提高性能_Java_Performance_Hadoop_Mapreduce - Fatal编程技术网

Java 在MapReduce中修改映射器大小(拆分大小)以提高性能

Java 在MapReduce中修改映射器大小(拆分大小)以提高性能,java,performance,hadoop,mapreduce,Java,Performance,Hadoop,Mapreduce,是否有任何方法可以通过更改映射任务的数量或更改每个映射器的拆分大小来提高MapReduce的性能? 例如,我有一个100GB的文本文件和20个节点。我想在文本文件上运行WordCount作业,理想的映射器数量或理想的分割大小是多少,以便更快地完成 有了更多的制图员会更快吗? 使用较小的拆分大小会更快吗 编辑 我使用的是hadoop 2.7.1,只是想让您知道其中有一些问题。当您使用更多的映射器时,它不一定会更快。每个映射器都有一个启动和设置时间。在hadoop的早期,当mapreduce成为事实

是否有任何方法可以通过更改映射任务的数量或更改每个映射器的拆分大小来提高MapReduce的性能? 例如,我有一个100GB的文本文件和20个节点。我想在文本文件上运行WordCount作业,理想的映射器数量或理想的分割大小是多少,以便更快地完成

有了更多的制图员会更快吗? 使用较小的拆分大小会更快吗

编辑


我使用的是hadoop 2.7.1,只是想让您知道其中有一些问题。

当您使用更多的映射器时,它不一定会更快。每个映射器都有一个启动和设置时间。在hadoop的早期,当mapreduce成为事实上的标准时,据说映射程序应该运行10分钟左右。今天的文档推荐1分钟。您可以使用可以在中定义的
setNumMapTasks(int)
来改变映射任务的数量。在该方法的文档中,有关于映射器计数的非常好的信息:

有多少张地图?

地图的数量通常由总大小决定 输入的数量,即输入文件的块总数

地图的正确并行度似乎在10-100个地图左右 每个节点,虽然它已设置为300左右,非常cpu轻 映射任务。任务设置需要一段时间,因此最好在 至少需要一分钟来执行

基于文件的InputFormats的默认行为是分割输入 根据输入的总大小(以字节为单位)拆分为逻辑输入 文件夹。但是,将处理输入文件的文件系统块大小 作为输入拆分的上限。拆分大小的下限 可以通过mapreduce.input.fileinputformat.split.minsize进行设置

因此,如果您预期输入数据为10TB,块大小为128MB, 除非使用setNumMapTasks(int),否则最终将得到82000个贴图 再高一点

你的问题可能与


老实说,试着看看现代框架,比如和。

你建议使用20-40个映射器,原因是什么?另外,setNumMapTasks(int)函数的java文件位置在哪里?由于版本号的原因,我改进了我的答案。我希望它能提供所需的信息谢谢你的回答!