[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.나는 다른이 작업 srart 업 시간에 있음을 추측 할 수있다. 클러스터 것이 일반적 초 수십 동안 로컬 모드의 경우는, 몇 초입니다. 이러한 가정을 확인하려면 더 많은 데이터를 넣어 해당 클러스터의 성능이 단일 노드 다음 더 나은되었다 확인할 수 있습니다. 추가 가능한 원인 - 완전히 하드웨어를 활용하는 것만으로는 충분하지 매퍼가있을 수 있습니다. 나는 당신이 코어의 수 맵퍼의 2 배의 수를 시도 제안했다.
나는 다른이 작업 srart 업 시간에 있음을 추측 할 수있다. 클러스터 것이 일반적 초 수십 동안 로컬 모드의 경우는, 몇 초입니다. 이러한 가정을 확인하려면 더 많은 데이터를 넣어 해당 클러스터의 성능이 단일 노드 다음 더 나은되었다 확인할 수 있습니다. 추가 가능한 원인 - 완전히 하드웨어를 활용하는 것만으로는 충분하지 매퍼가있을 수 있습니다. 나는 당신이 코어의 수 맵퍼의 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
'HADOOP' 카테고리의 다른 글
[HADOOP] 어떻게 각 맵의 입력 데이터의 크기를 얻거나 작업을 줄일 수있다? (0) | 2019.10.06 |
---|---|
[HADOOP] java.lang.ClassNotFoundException가 : org.apache.hadoop.hive.service.HiveServerException (0) | 2019.10.06 |
[HADOOP] 어떻게 OutputCommitter의 설정을 설정하는 방법? (0) | 2019.10.05 |
[HADOOP] 어떻게 .lzo_deflat 파일을 디코딩 할 수? (0) | 2019.10.05 |
[HADOOP] 몇 열에 대한 열을 번들 하이브 / SQL은 열 나머지는 풀을 기반으로하는 다른 열 최저 / 최고 (0) | 2019.10.05 |