2012-01-02 19 views
0

小さな入力(〜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))); 
}; 

答えて

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は一時的であると言いますが、システムファイルとデータファイルも格納します。

関連する問題