2015-12-28 72 views
1

我收到以下錯誤的MapReduce工作:什麼MapReduce框架寫拆分元信息文件

工作初始化失敗:java.io.IOException異常:斯普利特元數據尺寸 超過10000000中止工作job_201511121020_1680在 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) at org.apac he.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。

任何幫助更好地理解這個錯誤表示讚賞。

回答

0

通過的分裂元信息默認最大大小設置爲10000000

public static final long DEFAULT_SPLIT_METAINFO_MAXSIZE = 10000000L 

您可以通過設置配置參數覆蓋它:mapreduce.job.split.metainfo.maxsize,在mapred-site.xml中。

現在來到你的問題:每個作業創建

  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. 
    

可以約SplitMetaInfo類在這裏找到更多的信息:JobSplit.java