복붙노트

[HADOOP] Oozie 워크 플로우에있는 MapReduce 작업에서 감속기 수 설정

HADOOP

Oozie 워크 플로우에있는 MapReduce 작업에서 감속기 수 설정

5 개의 노드 클러스터가 있는데 그 중 3 개의 노드에는 DataNode 및 TaskTracker가 포함되어 있습니다.

Sqoop을 통해 Oracle에서 약 1 천만 개의 행을 가져오고 Oozie 워크 플로에서 MapReduce를 통해 처리했습니다.

MapReduce 작업은 약 30 분이 걸리며 감속기를 하나만 사용합니다.

편집-Oozie와 별도로 MapReduce 코드를 자체적으로 실행하면 job.setNumReduceTasks (4)가 4 개의 감속기를 올바르게 설정합니다.

성공하지 않고 감속기 수를 4로 수동 설정하기 위해 다음 방법을 시도했습니다.

Oozie에서 맵 감소 노드의 태그에 다음 특성을 설정하십시오.

<property><name>mapred.reduce.tasks</name><value>4</value></property>

MapReduce Java 코드의 Main 메소드에서 :

Configuration conf = new Configuration();
Job job = new Job(conf, "10 million rows");
...
job.setNumReduceTasks(4);

나는 또한 시도했다 :

Configuration conf = new Configuration();
Job job = new Job(conf, "10 million rows");
...
conf.set("mapred.reduce.tasks", "4");

내지도 기능은 다음과 유사합니다.

public void map(Text key, Text value, Context context) {
    CustomObj customObj = new CustomObj(key.toString());
    context.write(new Text(customObj.getId()), customObj);  
}

ID에 80,000 개의 다른 값이 있다고 생각합니다.

내 축소 기능은 다음과 유사합니다.

public void reduce(Text key, Iterable<CustomObj> vals, Context context) {
    OtherCustomObj otherCustomObj = new OtherCustomObj();
    ...
    context.write(null, otherCustomObj);
}

매퍼에서 생성 된 사용자 지정 개체는 WritableComparable을 구현하지만 Reducer에서 생성 된 다른 사용자 지정 개체는 WritableComparable을 구현하지 않습니다.

다음은 시스템 카운터, 작업 카운터 및 맵 축소 프레임 워크와 관련된 로그이며, 여기서 하나의 축소 작업 만 시작하도록 지정합니다.

 map 100% reduce 100%
 Job complete: job_201401131546_0425
 Counters: 32
   File System Counters
     FILE: Number of bytes read=1370377216
     FILE: Number of bytes written=2057213222
     FILE: Number of read operations=0
     FILE: Number of large read operations=0
     FILE: Number of write operations=0
     HDFS: Number of bytes read=556345690
     HDFS: Number of bytes written=166938092
     HDFS: Number of read operations=18
     HDFS: Number of large read operations=0
     HDFS: Number of write operations=1
   Job Counters 
     Launched map tasks=11
     Launched reduce tasks=1
     Data-local map tasks=11
     Total time spent by all maps in occupied slots (ms)=1268296
     Total time spent by all reduces in occupied slots (ms)=709774
     Total time spent by all maps waiting after reserving slots (ms)=0
     Total time spent by all reduces waiting after reserving slots (ms)=0
   Map-Reduce Framework
     Map input records=9440000
     Map output records=9440000
     Map output bytes=666308476
     Input split bytes=1422
     Combine input records=0
     Combine output records=0
     Reduce input groups=80000
     Reduce shuffle bytes=685188530
     Reduce input records=9440000
     Reduce output records=2612760
     Spilled Records=28320000
     CPU time spent (ms)=1849500
     Physical memory (bytes) snapshot=3581157376
     Virtual memory (bytes) snapshot=15008251904
     Total committed heap usage (bytes)=2848063488

편집 : 사용자 정의 파티 셔너, 정렬 비교기 및 그룹화 비교기를 도입하도록 MapReduce를 수정했습니다. 어떤 이유로 든 코드는 이제 두 개의 감속기를 시작하지만 (Oozie를 통해 예약 된 경우) 4 개는 아닙니다.

각 TaskTracker (및 JobTracker)에서 mapred.tasktracker.map.tasks.maximum 속성을 20으로 설정하고 다시 시작했지만 결과는 없습니다.

해결법

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

    1.mapred-site.xml에서 다음 특성의 값은 무엇입니까?

    mapred-site.xml에서 다음 특성의 값은 무엇입니까?

    <property>
        <name>mapred.tasktracker.map.tasks.maximum</name>
        <value>4</value>
    </property>
    
  2. from https://stackoverflow.com/questions/21292940/setting-the-number-of-reducers-in-a-mapreduce-job-which-is-in-an-oozie-workflow by cc-by-sa and MIT license