복붙노트

[HADOOP] 왜 매퍼와 작업이 유일한 클러스터의 느린입니까?

HADOOP

왜 매퍼와 작업이 유일한 클러스터의 느린입니까?

나는 값으로 키와 DoubleArrayWritable로 VLongWritable와 SequencialFile에 텍스트 데이터를 변환하기 위해 필요한 경우에만 매퍼 PrepareData과 함께 작업을해야합니다.

나는 예를 들어 455000x90을 통해 라인 (~ 384 MB) 데이터를 실행하는 경우 :

로컬 모드에서 평균적으로 걸리는 것 :

=> 평균 52-53 초.

하지만이 두 기계 (애슬론 64 X2 듀얼 코어 5600+, 3700+) 그것의 최상의 경우 81 초 정도와 실제 클러스터에서 실행할 때.

작업 4 매퍼 (블록 사이즈 ~ 96메가바이트) 2 이경으로 실행된다.

하둡 0.21.0에 의해 구동 클러스터는 JVM 재사용에 대해 구성.

매퍼 :

public class PrepareDataMapper
       extends Mapper<LongWritable, Text, VLongWritable, DoubleArrayWritable> {

private int size;

// hint
private DoubleWritable[] doubleArray;
private DoubleArrayWritable mapperOutArray = new DoubleArrayWritable();
private VLongWritable mapOutKey = new VLongWritable();

@Override
protected void setup(Context context) throws IOException {
    Configuration conf = context.getConfiguration();
    size = conf.getInt("dataDimSize", 0);
    doubleArray = new DoubleWritable[size];
    for (int i = 0; i < size; i++) {
        doubleArray[i] = new DoubleWritable();
    }
}

@Override
public void map(
        LongWritable key,
        Text row,
        Context context) throws IOException, InterruptedException {
    String[] fields = row.toString().split(",");
    for (int i = 0; i < size; i++) {
        doubleArray[i].set(Double.valueOf(fields[i]));
    }
    mapperOutArray.set(doubleArray);
    mapOutKey.set(key.get());
    context.write(mapOutKey, mapperOutArray);
}   
}

DoubleArrayWritable :

public class DoubleArrayWritable extends ArrayWritable {

public DoubleArrayWritable() {
    super(DoubleWritable.class);
}

public DoubleArrayWritable(DoubleWritable[] values) {
    super(DoubleWritable.class, values);
}

public void set(DoubleWritable[] values) {
    super.set(values);
}

public DoubleWritable get(int idx) {
    return (DoubleWritable) get()[idx];
}

public double[] getVector(int from, int to) {
    int sz = to - from + 1;
    double[] vector = new double[sz];
    for (int i = from; i <= to; i++) {
        vector[i-from] = get(i).get();
    }
    return vector;
} 
}

해결법

  1. ==============================

    1.나는 다른이 작업 srart 업 시간에 있음을 추측 할 수있다. 클러스터 것이 일반적 초 수십 동안 로컬 모드의 경우는, 몇 초입니다. 이러한 가정을 확인하려면 더 많은 데이터를 넣어 해당 클러스터의 성능이 단일 노드 다음 더 나은되었다 확인할 수 있습니다. 추가 가능한 원인 - 완전히 하드웨어를 활용하는 것만으로는 충분하지 매퍼가있을 수 있습니다. 나는 당신이 코어의 수 맵퍼의 2 배의 수를 시도 제안했다.

    나는 다른이 작업 srart 업 시간에 있음을 추측 할 수있다. 클러스터 것이 일반적 초 수십 동안 로컬 모드의 경우는, 몇 초입니다. 이러한 가정을 확인하려면 더 많은 데이터를 넣어 해당 클러스터의 성능이 단일 노드 다음 더 나은되었다 확인할 수 있습니다. 추가 가능한 원인 - 완전히 하드웨어를 활용하는 것만으로는 충분하지 매퍼가있을 수 있습니다. 나는 당신이 코어의 수 맵퍼의 2 배의 수를 시도 제안했다.

  2. from https://stackoverflow.com/questions/8120311/why-job-with-mappers-only-is-so-slow-in-real-cluster by cc-by-sa and MIT license