如何在 mapreduce 作业中获得适当大小的输入拆分
How to get appropriate size of input split in mapreduce job
我正在基于 Hortonworks 的 Microsoft HDInsight 中处理 Map-Only MR 作业。我的输入数据约为 1GB,块大小为 128MB。
当我运行我的工作没有设置分割大小时,我的输入数据被分成2个分割,地图任务的数量也是2。这需要很长时间,所以我想通过增加地图任务的数量来加快这个过程。
我通过设置mapreduce.input.fileinputformat.split.minsize
和mapreduce.input.fileinputformat.split.minsize
的值来设置分割数。
首先,我将拆分次数设置为8,此作业耗时为35分钟。然后我设置为16和64,耗时分别是21分钟和16分钟
但是当我将拆分设置为 128 时,这项工作消耗的时间从 16 分钟增加到 18 分钟。
我的问题:
1:为什么地图任务越多时间越长?我知道实例化地图需要一些时间 class,但还有其他原因吗?
2:有没有办法决定最合适的拆分大小?
谢谢
PS: 我的输入文件是没有“.txt”的文本文件。
- 时间增加的原因是由于您提到的更多地图任务。映射器的数量和输入分割大小之间总是存在权衡。
在您的情况下,在您的 JVM 中实例化一个 Mapper class 可能比您在 Mapper 中的逻辑花费更多的时间。还有一个原因可能是集群中的资源无法启动 Mapper。其中一些将等到您当前的 tasks/Mappers 完成,然后它们将被实例化。
- 我建议通过在 TextInputFormat 中将 reducer 的数量设置为 0 来通过 Mappers 发出数据。然后它写入 x 个文件,每个文件的输入分割大小。
我正在基于 Hortonworks 的 Microsoft HDInsight 中处理 Map-Only MR 作业。我的输入数据约为 1GB,块大小为 128MB。
当我运行我的工作没有设置分割大小时,我的输入数据被分成2个分割,地图任务的数量也是2。这需要很长时间,所以我想通过增加地图任务的数量来加快这个过程。
我通过设置mapreduce.input.fileinputformat.split.minsize
和mapreduce.input.fileinputformat.split.minsize
的值来设置分割数。
首先,我将拆分次数设置为8,此作业耗时为35分钟。然后我设置为16和64,耗时分别是21分钟和16分钟
但是当我将拆分设置为 128 时,这项工作消耗的时间从 16 分钟增加到 18 分钟。
我的问题:
1:为什么地图任务越多时间越长?我知道实例化地图需要一些时间 class,但还有其他原因吗?
2:有没有办法决定最合适的拆分大小?
谢谢 PS: 我的输入文件是没有“.txt”的文本文件。
- 时间增加的原因是由于您提到的更多地图任务。映射器的数量和输入分割大小之间总是存在权衡。
在您的情况下,在您的 JVM 中实例化一个 Mapper class 可能比您在 Mapper 中的逻辑花费更多的时间。还有一个原因可能是集群中的资源无法启动 Mapper。其中一些将等到您当前的 tasks/Mappers 完成,然后它们将被实例化。
- 我建议通过在 TextInputFormat 中将 reducer 的数量设置为 0 来通过 Mappers 发出数据。然后它写入 x 个文件,每个文件的输入分割大小。