美文网首页
MapReduce中的map个数

MapReduce中的map个数

作者: 匠心1570 | 来源:发表于2019-03-13 23:02 被阅读0次

    准确的说,map个数是指map task的个数,map task可以看作进程,并发执行一个job任务。

    在map阶段读取数据前,FileInputFormat会将输入文件分割成split。split的个数决定了map的个数。影响map个数(split个数)的主要因素有:

      1) 文件的大小。当块(dfs.block.size)为128m时,如果输入文件为128m,会被划分为1个split;当块为256m,会被划分为2个split。

      2) 文件的个数。FileInputFormat按照文件分割split,并且只会分割大文件,即那些大小超过HDFS块的大小的文件。如果HDFS中dfs.block.size设置为128m,而输入的目录中文件有100个,则划分后的split个数至少为100个。

      3) splitsize的大小。分片是按照splitszie的大小进行分割的,一个split的大小在没有设置的情况下,默认等于hdfs block的大小。但应用程序可以通过两个参数来对splitsize进行调节

        InputSplit=Math.max(minSize, Math.min(maxSize, blockSize)

        其中:

          minSize=mapred.min.split.size

          maxSize=mapred.max.split.size

        我们可以在MapReduce程序的驱动部分添加如下代码:

          TextInputFormat.setMinInputSplitSize(job,1024L); // 设置最小分片大小

          TextInputFormat.setMaxInputSplitSize(job,1024×1024×10L); // 设置最大分片大小

        总结如下:

          当mapreduce.input.fileinputformat.split.maxsize > mapreduce.input.fileinputformat.split.minsize > dfs.blockSize的情况下,此时的splitSize 将由mapreduce.input.fileinputformat.split.minsize参数决定

          当mapreduce.input.fileinputformat.split.maxsize > dfs.blockSize > mapreduce.input.fileinputformat.split.minsize的情况下,此时的splitSize 将由dfs.blockSize配置决定

          当dfs.blockSize > mapreduce.input.fileinputformat.split.maxsize > mapreduce.input.fileinputformat.split.minsize的情况下,此时的splitSize将由mapreduce.input.fileinputformat.split.maxsize参数决定。

    相关文章

      网友评论

          本文标题:MapReduce中的map个数

          本文链接:https://www.haomeiwen.com/subject/nknxmqtx.html