美文网首页
Split metadata size exceeded 100

Split metadata size exceeded 100

作者: raincoffee | 来源:发表于2018-04-23 17:45 被阅读554次

    Q:
    Job init failed : org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.io.IOException: Split metadata size exceeded 10000000. Aborting job job_1523431310007_1292875
    at org.apache.hadoop.mapreduce.v2.app.job.impl.JobImpl$InitTransition.createSplits(JobImpl.java:1568)
    at org.apache.hadoop.mapreduce.v2.app.job.impl.JobImpl$InitTransition.transition(JobImpl.java:1432)
    at org.apache.hadoop.mapreduce.v2.app.job.impl.JobImpl$InitTransition.transition(JobImpl.java:1390)

    A:
    输入文件包括大量小文件或者文件目录,造成Splitmetainfo文件超过默认上限。

    修改默认作业参数mapreduce.jobtracker.split.metainfo.maxsize =100000000 或者mapreduce.jobtracker.split.metainfo.maxsize = -1 (默认值是1000000)

    或者修改-D=mapreduce.input.fileinputformat.split.minsize=4294967296 调大split大小;这样子做会减少map个数

    下面我们细说怎样划分数据分片。job可能会有多个输入文件,或许分布在不同的目录下。我们获取输入目录的设置,然后识别得到我们需要处理的那些文件。这里我们可以设置一个PathFilter来过滤那些目录中的文件是否符合我们的要求,自定义的PathFilter类可由mapreduce.input.pathFilter.class属性来设置。对于我们获取的每一个输入文件,根据它的block信息产生数据分片,文件之间不能产生分片。我们可以设置数据分片的数据大小,最小字节数由mapreduce.input.fileinputformat.split.minsize设置,默认是1,最大字节数由mapreduce.input.fileinputformat.split.maxsize设置,默认是Long.MAX_VALUE。由用户定义的分片大小的设置及每个文件block大小的设置,可以计算得分片的大小。计算分片大小的公式是

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

    从公式可以看出,如果maxSize设置大于blockSize,那么每个block就是一个分片,否则就会将一个block文件分隔为多个分片,如果block中剩下的一小段数据量小于splitSize,还是认为它是独立的分片。

    相关文章

      网友评论

          本文标题:Split metadata size exceeded 100

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