2012-01-02 5 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은 임시라고하지만 시스템 및 데이터 파일도 저장합니다.