我正在運行一個地圖縮小作業,它需要一個尺寸爲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)));
};