복붙노트

[HADOOP] Hadoop MapReduce : 하나의 하프 직업 클래스에 두 개의 매퍼와 리듀서를 정의 할 수 있습니까?

HADOOP

Hadoop MapReduce : 하나의 하프 직업 클래스에 두 개의 매퍼와 리듀서를 정의 할 수 있습니까?

두 가지 다른 mapreduce 작업을 수행하는 두 개의 별도 자바 클래스가 있습니다. 나는 그것들을 독립적으로 실행할 수있다. 이들이 작동하는 입력 파일은 두 작업 모두에 대해 동일합니다. 그래서 내 질문에 하나의 자바 클래스에서 두 mappers 및 두 reducers 정의 할 수 있는지 여부입니다

mapper1.class
mapper2.class
reducer1.class
reducer2.class

그리고 나서

job.setMapperClass(mapper1.class);
job.setmapperClass(mapper2.class);
job.setCombinerClass(reducer1);
job.setCombinerClass(reducer2);
job.setReducerClass(reducer1);
job.setReducerClass(reducer2);

이러한 set 메소드가 실제로 이전 메소드를 대체하거나 새 메소드를 추가합니까? 코드를 사용해 보았지만, 클래스가 재정의했다고 생각하게하는 최신 클래스 만 실행합니다. 하지만이 일을 제대로 수행 할 수있는 방법이 있어야합니까?

내가 이것을 묻는 이유는 입력 파일을 한 번만 (I / O 하나) 읽고 두 개의 맵 축소 작업을 처리 할 수 ​​있기 때문입니다. 또한 두 개의 다른 폴더에 출력 파일을 쓰는 방법을 알고 싶습니다. 현재 두 작업은 별도로 수행되므로 입력 및 출력 디렉토리가 필요합니다.

해결법

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

    1.여러 개의 매퍼가있을 수 있지만 하나의 작업에서는 하나의 축소기를 사용할 수 있습니다. 그리고 필요한 기능은 MultipleInput, MultipleOutput 및 GenericWritable입니다.

    여러 개의 매퍼가있을 수 있지만 하나의 작업에서는 하나의 축소기를 사용할 수 있습니다. 그리고 필요한 기능은 MultipleInput, MultipleOutput 및 GenericWritable입니다.

    MultipleInput을 사용하여 매퍼와 해당 inputFormat을 설정할 수 있습니다. 여기에 그것을 사용하는 방법에 대한 내 게시물입니다.

    Generic Writable을 사용하면 감속기에서 여러 입력 클래스를 분리 할 수 ​​있습니다. 여기에 그것을 사용하는 방법에 대한 내 게시물입니다.

    Multiple Output을 사용하면 동일한 감속기에서 다른 클래스를 출력 할 수 있습니다.

  2. ==============================

    2.이 경우에는 MultipleInputs 및 MultipleOutputs 클래스를 사용할 수 있지만 두 매퍼의 출력은 둘 다 reducers에 전달됩니다. 두 개의 매퍼 / 감속기 쌍에 대한 데이터 흐름이 실제로 서로 독립적 인 경우 두 개의 개별 작업으로 유지하십시오. 그런데 MultipleInputs는 변경 사항을 적용하지 않고 맵퍼를 실행하지만 다중 출력을 사용하려면 리듀서를 수정해야합니다.

    이 경우에는 MultipleInputs 및 MultipleOutputs 클래스를 사용할 수 있지만 두 매퍼의 출력은 둘 다 reducers에 전달됩니다. 두 개의 매퍼 / 감속기 쌍에 대한 데이터 흐름이 실제로 서로 독립적 인 경우 두 개의 개별 작업으로 유지하십시오. 그런데 MultipleInputs는 변경 사항을 적용하지 않고 맵퍼를 실행하지만 다중 출력을 사용하려면 리듀서를 수정해야합니다.

  3. ==============================

    3.Hadoop 스트리밍으로 map-reduce를 사용함에 따른 나의 이해에 따라, 다른 맵퍼의 출력을 소비하는 여러 맵퍼와 리듀서를 연결할 수 있습니다

    Hadoop 스트리밍으로 map-reduce를 사용함에 따른 나의 이해에 따라, 다른 맵퍼의 출력을 소비하는 여러 맵퍼와 리듀서를 연결할 수 있습니다

    그러나 다른 매퍼와 리듀서를 동시에 실행할 수는 없습니다. 매퍼 자체는 처리 할 블록 수에 따라 다릅니다. Mapper는 해당 결정을 기반으로 인스턴스화되어야하며 해당 작업에 사용할 수있는 다양한 매퍼가 아닙니다.

    [편집 : 귀하의 의견에 따라]

    나는 그것이 가능하다고 생각하지 않는다. 체인을 연결할 수 있습니다 (리듀서는 매퍼에서 모든 입력을받습니다. 시퀀스를 지정할 수는 있지만 매퍼 및 리듀서의 독립적 인 세트 만 독점적으로 실행할 수는 없습니다).

    당신이 할 수있는 일은 매퍼로부터 두 입력을 모두 감속기로 받는다 할지라도 매퍼 출력을 (K, V) 감속기에서 구별 할 수있는 방식으로 만들 수 있다는 것입니다. (K, V)의 기원. 이 방법을 사용하면 두 감속기가 선택적 (K, V) 쌍을 처리 할 수 ​​있습니다.

  4. ==============================

    4.ChainMapper 클래스는 단일 Map 작업 내에서 여러 Mapper 클래스를 사용할 수 있도록합니다. 예를 들어 여기를보십시오.

    ChainMapper 클래스는 단일 Map 작업 내에서 여러 Mapper 클래스를 사용할 수 있도록합니다. 예를 들어 여기를보십시오.

  5. from https://stackoverflow.com/questions/11122832/hadoop-mapreduce-possible-to-define-two-mappers-and-reducers-in-one-hadoop-job by cc-by-sa and MIT license