小さな入力(〜3MB、サイズzの整数のリスト)である のマップリダクションジョブを、サイズがnxmのスパース行列キャッシュで実行していて、基本的にzスパースベクトルを出力しています次元(nx 1)のここの出力はかなり大きい(〜2TB)。私は、入力と出力としてS3ストレージを備えたAmazon EC2上で20 m1の小さなノードを実行しています。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)));
};