我为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设置)引起的。我假设这个元数据被写入一个文件,并且它的文件大小超过了限制。
我还有几个问题:
感谢任何有助于更好地理解此错误的帮助。
答案 0 :(得分:1)
默认情况下,拆分元信息的最大大小设置为10000000
public static final long DEFAULT_SPLIT_METAINFO_MAXSIZE = 10000000L
您可以通过在mapred-site.xml中设置配置参数mapreduce.job.split.metainfo.maxsize
来覆盖它。
现在回答你的问题:
每个作业创建一个拆分文件。拆分文件存储在每个作业的.staging
文件夹中。拆分文件的名称为job.split
。
此文件的内容为:
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.
您可以在此处找到有关SplitMetaInfo
课程的更多信息:JobSplit.java