2012-01-02 25 views
0

我正在運行一個地圖縮小作業,它需要一個尺寸爲nxm的稀疏矩陣緩存,一個小輸入(〜3MB,大小爲z的整數列表), ,基本上輸出z個稀疏矢量尺寸(nx 1)。這裏的輸出非常大(〜2TB)。我使用S3存儲作爲輸入和輸出,在Amazon EC2上運行20個小型節點。Hadoop S3沒有空間留在設備上

但是,我得到一個IOException:設備上沒有剩餘空間。 好像有在Hadoop日誌上寫的s3字節,但沒有創建文件。 當我使用較小的輸入(較小的z)時,作業完成後輸出正確。因此,我相信它在臨時存儲上耗盡。

有沒有辦法檢查這個臨時存儲的位置? 此外,有趣的是,日誌是說所有的字節都寫入s3,但我沒有看到文件,也不知道這些字節寫在哪裏。

謝謝你的幫助。

實施例的代碼(也試圖分裂成圖,並降低與相同的錯誤作業)

public void map(LongWritable key, Text value, 
Mapper<LongWritable, Text, LongWritable, VectorWritable>.Context context) 
throws IOException, InterruptedException 
{ 
    // Assume the input is id \t number 
    String[] input = value.toString().split("\t"); 
    int idx = Integer.parseInt(input[0]) - 1; 

    // Some operations to do, but basically outputting a vector 
    // Collect the output 
    context.write(new LongWritable(idx), new VectorWritable(matrix.getColumn(idx))); 
}; 

回答

0

亞馬遜EMR支持幾個versions。這些是默認值0.20.205

hadoop.tmp.dir - /tmp/hadoop-${user.name} - 其他臨時目錄的基礎。

mapred.local.dir - $ {hadoop.tmp.dir}/mapred/local - MapReduce存儲中間數據文件的本地目錄。爲了擴展磁盤I/O,可能是不同設備上以逗號分隔的目錄列表。不存在的目錄被忽略。

mapred.temp.dir - $ {hadoop.tmp.dir}/mapred/temp - 臨時文件的共享目錄。


運行在hadoop.tmp.dirdu --max-depth=7 /home/xyz | sort -n命令並檢查該目錄佔據了大部分空間。雖然hadoop.tmp.dir說暫時的,它也存儲系統和數據文件。

相關問題