Hadoop S3设备上没有剩余空间

时间:2012-01-02 18:18:07

标签: amazon-s3 amazon-ec2 hadoop ioexception

我正在运行一个地图缩小作业,需要一个小输入(~3MB,大小为z的整数列表), 具有大小为n×m的稀疏矩阵高速缓存,并且基本上输出尺寸为(n×1)的z稀疏向量。这里的输出非常大(约2TB)。我在Amazon EC2上运行20个m1.small节点,并将S3存储作为输入和输出。

但是,我收到IOException:设备上没有剩余空间。 看起来在Hadoop日志上写了s3字节,但没有创建文件。 当我使用较小的输入(较小的z)时,在作业完成后输出正确。 因此,我认为它在临时存储中耗尽。

有没有办法检查这个临时存储的位置? 另外,有趣的是日志说所有字节都写入s3,但我看不到文件,也不知道这些字节的写入位置。

感谢您的帮助。

示例代码(也尝试拆分为map并减少相同错误的作业)

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)));
};   

1 个答案:

答案 0 :(得分:0)

Amazon 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 - 临时文件的共享目录。


du --max-depth=7 /home/xyz | sort -n上运行hadoop.tmp.dir命令,检查哪个目录占用的空间最多。虽然hadoop.tmp.dir表示临时,但它也存储系统和数据文件。