[HADOOP] Mapper and Reducer 클래스에서 변수를 공유하는 방법은 무엇입니까?
HADOOPMapper and Reducer 클래스에서 변수를 공유하는 방법은 무엇입니까?
매퍼와 감속기 클래스간에 변수를 공유하고 싶습니다. 시나리오는 다음과 같습니다 : -
내 입력 레코드가 A, B 및 C 유형이라고합시다.이 레코드를 처리 중이며 그에 따라 map 함수에서 output.collect의 키와 값을 생성합니다. 그러나 동시에 mapper 클래스에서 3 개의 정적 int 변수를 선언하여 A, B 및 C 레코드 유형의 수를 유지합니다. 이제 이러한 변수는 다양한 맵 스레드에 의해 업데이트됩니다. 모든 맵 작업이 끝나면 Reduce 함수에이 세 값을 전달하고 싶습니다.
어떻게 이것을 달성 할 수 있습니까? close () 메서드를 재정의하려고 시도했지만 모든 맵 함수가 실행 된 후 모든 맵 함수가 실행을 마친 후에 호출됩니다. 또는 변수를 공유하는 다른 방법이 있습니까? 내가 출력하고있는 처리 된 결과와 함께 각 레코드 유형의 총 수를 출력하고 싶습니다.
해결법
-
==============================
1.카운터는 특별한 이유가 있습니다. 예를 들어, "NUMBER_OF_RECORDS_DISCARDED"와 같은 특정 상태의 수를 유지합니다. 그리고 나는이 카운터를 증가시키고 임의의 값으로 설정하지 않을 것입니다 (나는 틀릴 수도 있습니다). 하지만 메시지 전달자로 사용할 수는 있지만 더 나은 방법이 있습니다. 이는 작업 구성을 사용하여 변수를 완벽하게 설정하는 것입니다. 그러나 이것은 매퍼 (mapper) 또는 감속기 (reducer)에 맞춤 메시지를 전달하는 데에만 사용할 수 있으며 감속기에서는 매퍼 (mapper)의 변경 사항을 사용할 수 없습니다.
카운터는 특별한 이유가 있습니다. 예를 들어, "NUMBER_OF_RECORDS_DISCARDED"와 같은 특정 상태의 수를 유지합니다. 그리고 나는이 카운터를 증가시키고 임의의 값으로 설정하지 않을 것입니다 (나는 틀릴 수도 있습니다). 하지만 메시지 전달자로 사용할 수는 있지만 더 나은 방법이 있습니다. 이는 작업 구성을 사용하여 변수를 완벽하게 설정하는 것입니다. 그러나 이것은 매퍼 (mapper) 또는 감속기 (reducer)에 맞춤 메시지를 전달하는 데에만 사용할 수 있으며 감속기에서는 매퍼 (mapper)의 변경 사항을 사용할 수 없습니다.
이전 맵핑 된 API를 사용하여 메시지 / 변수 설정
JobConf job = (JobConf) getConf(); job.set("messageToBePassed-OR-anyValue", "123-awesome-value :P");
새로운 mapreduce API를 사용하여 메시지 / 변수 설정하기 :
Configuration conf = new Configuration(); conf.set("messageToBePassed-OR-anyValue", "123-awesome-value :P"); Job job = new Job(conf);
Mapper and Reducer에서 이전 API를 사용하여 메시지 / 변수 가져 오기 : configure ()는 Mapper 및 Reducer 클래스에서 구현되어야하며 map () 또는 reduce () 내부에서 사용되도록 값을 클래스 멤버에 할당 할 수 있습니다.
... private String awesomeMessage; public void configure(JobConf job) { awesomeMessage = Long.parseLong(job.get("messageToBePassed-OR-anyValue")); } ...
그런 다음 awesomeMessage 변수를 map 및 reduce 함수와 함께 사용할 수 있습니다.
Mapper and Reducer에서 새 API를 사용하여 메시지 / 변수 가져 오기 : setup ()에서도 비슷한 일이 필요합니다.
Configuration conf = context.getConfiguration(); String param = conf.get("messageToBePassed-OR-anyValue");
-
==============================
2.해결책을 얻었다.
해결책을 얻었다.
사용 된 카운터. Mapper와 Reducer의 기자반이 접근 할 수 있습니다.
from https://stackoverflow.com/questions/14196097/how-to-share-a-variable-in-mapper-and-reducer-class by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop 2.2.0의 HDFS 구성 파일은 어디에 있습니까? (0) | 2019.08.02 |
---|---|
[HADOOP] Hadoop과 MySQL 통합 (0) | 2019.08.02 |
[HADOOP] Hadoop 구성 속성이 Null을 반환합니다. (0) | 2019.08.02 |
[HADOOP] 이클립스에서 Hadoop을 사용할 때 libprotoc가 오래 되었기 때문에 트렁크가 컴파일되지 않는다. (0) | 2019.08.02 |
[HADOOP] 아파치 하마 설치 오류 우분투 14.04에 (0) | 2019.08.02 |