Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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
Hadoop 如何在mapreduce作业中获得适当大小的输入拆分_Hadoop_Mapreduce_Azure Hdinsight - Fatal编程技术网

Hadoop 如何在mapreduce作业中获得适当大小的输入拆分

Hadoop 如何在mapreduce作业中获得适当大小的输入拆分,hadoop,mapreduce,azure-hdinsight,Hadoop,Mapreduce,Azure Hdinsight,我在基于Hortonworks的Microsoft HDInsight中从事仅地图的MR工作。我的输入数据大约为1GB,块大小为128MB 当我在不设置分割大小的情况下运行作业时,我的输入数据被分成两个分割,映射任务的数量也是2。这需要很长时间,所以我想通过增加地图任务的数量来加快这个过程 我通过设置mapreduce.input.fileinputformat.split.minsize和mapreduce.input.fileinputformat.split.minsize的值来设置拆分的

我在基于Hortonworks的Microsoft HDInsight中从事仅地图的MR工作。我的输入数据大约为1GB,块大小为128MB

当我在不设置分割大小的情况下运行作业时,我的输入数据被分成两个分割,映射任务的数量也是2。这需要很长时间,所以我想通过增加地图任务的数量来加快这个过程

我通过设置
mapreduce.input.fileinputformat.split.minsize
mapreduce.input.fileinputformat.split.minsize
的值来设置拆分的数量

首先,我将我的分割数设置为8,此作业所消耗的时间为35分钟。然后我将其设置为16和64,所消耗的时间分别为21分钟和16分钟

但是当我将splits设置为128时,这个工作所消耗的时间从16分钟增加到了18分钟

我的问题是:

1:为什么地图任务越多,时间越长?我知道实例化map类需要一些时间,但还有其他原因吗

2:有没有办法决定最合适的分割大小

多谢各位 我的输入文件是没有“.txt”的文本文件

  • 时间增加的原因是您提到的更多映射任务。映射器的数量和inputsplit大小之间总是有一个平衡点 在您的情况下,在JVM中实例化映射器类可能比映射器中的逻辑花费更多的时间。还有一个原因可能是集群中的资源不可用,无法启动映射器。其中一些将等待当前任务/映射程序完成,然后将实例化它们

  • 我建议只通过映射器发送数据,将TextInputFormat中的还原数设为0。然后,它会写入x个文件,每个文件的大小都与输入的拆分大小相同
  • 时间增加的原因是您提到的更多映射任务。映射器的数量和inputsplit大小之间总是有一个平衡点 在您的情况下,在JVM中实例化映射器类可能比映射器中的逻辑花费更多的时间。还有一个原因可能是集群中的资源不可用,无法启动映射器。其中一些将等待当前任务/映射程序完成,然后将实例化它们

  • 我建议只通过映射器发送数据,将TextInputFormat中的还原数设为0。然后,它会写入x个文件,每个文件的大小都与输入的拆分大小相同