mapreduce框架写什么来拆分metainfo文件

时间:2015-12-28 15:55:39

标签: hadoop mapreduce

我为mapreduce作业收到以下错误:

  

作业初始化失败:java.io.IOException:拆分元数据大小   超过10000000.中止工作职位_201511121020_1680 at   org.apache.hadoop.mapreduce.split.SplitMetaInfoReader.readSplitMetaInfo(SplitMetaInfoReader.java:48)   在   org.apache.hadoop.mapred.JobInProgress.createSplits(JobInProgress.java:828)   在   org.apache.hadoop.mapred.JobInProgress.initTasks(JobInProgress.java:730)   在org.apache.hadoop.mapred.JobTracker.initJob(JobTracker.java:3775)   在   org.apache.hadoop.mapred.EagerTaskInitializationListener $ InitJob.run(EagerTaskInitializationListener.java:90)   在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(ThreadPoolExecutor.java:886)   在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:908)   在java.lang.Thread.run(Thread.java:662)

此作业的输入路径为:/ dir1 / dir2 / / /年/周一/日......(7天)

以下是我从研究中收集到的内容:此错误是由于拆分元信息大小超出限制(由mapreduce.job.split.metainfo.maxsize设置)引起的。我假设这个元数据被写入一个文件,并且它的文件大小超过了限制。

我还有几个问题:

  1. 框架是否为每个作业创建一个文件或多个文件?
  2. 此文件的内容是什么?鉴于输入路径很深,当我将输入路径返回的所有文件写入文件时,其大小只有几MB。
  3. 感谢任何有助于更好地理解此错误的帮助。

1 个答案:

答案 0 :(得分:1)

默认情况下,拆分元信息的最大大小设置为10000000

public static final long DEFAULT_SPLIT_METAINFO_MAXSIZE = 10000000L

您可以通过在mapred-site.xml中设置配置参数mapreduce.job.split.metainfo.maxsize来覆盖它。

现在回答你的问题:

  1. 每个作业创建一个拆分文件。拆分文件存储在每个作业的.staging文件夹中。拆分文件的名称为job.split

  2. 此文件的内容为:

    1) Split file header: "META-SPL"
    
    2) Split file version: 1
    
    3) Number of splits
    
    4) Information about each split: 
       a) Locations of the split (a split can be present in 3 locations, if the replication factor is 3), 
       b) start offset
       c) length of the split. 
    
  3. 您可以在此处找到有关SplitMetaInfo课程的更多信息:JobSplit.java