[HADOOP] Hadoop 하나의지도 및 다중 Reduce
HADOOPHadoop 하나의지도 및 다중 Reduce
우리는 여러 개의 reduce 함수로 분석 할 수있는 거대한 데이터 세트를 가지고 있습니다.
모두 동일한 맵 함수에 의해 생성 된 동일한 데이터 세트에서 알고리즘 작업을 줄입니다. 대용량 데이터 집합을 읽는 것은 매번 그렇게하기에는 너무 많은 비용을 필요로하므로 한 번만 읽고 매핑 된 데이터를 여러 개의 감소 함수에 전달하는 것이 좋습니다.
Hadoop으로이 작업을 수행 할 수 있습니까? 나는 예제와 intarweb을 찾았지만 어떤 해결책도 찾을 수 없었다.
해결법
-
==============================
1.모든 감속기가 정확히 동일한 매핑 된 데이터를 처리 할 것으로 기대하십니까? 그러나 적어도 감속기를 결정할 때 "열쇠"는 달라야합니다.
모든 감속기가 정확히 동일한 매핑 된 데이터를 처리 할 것으로 기대하십니까? 그러나 적어도 감속기를 결정할 때 "열쇠"는 달라야합니다.
mapper에서 여러 번 출력을 작성하고 키로 출력 할 수 있습니다. 여기서 $ i는 i 차감 장치 용이고 $ key는 원래 키입니다. 그리고 이러한 n 개의 레코드가 $ i를 기준으로 감속기에 분산되어 있는지 확인하기 위해 "Partitioner"를 추가해야합니다. 그런 다음 "GroupingComparator"를 사용하여 원본 $ 키별로 레코드를 그룹화합니다.
그것은 가능하지만 그렇게 할 수는 없지만 하나의 MR에서 사소한 방식으로 수행 할 수는 없습니다.
-
==============================
2.어쩌면 간단한 해결책은 reduce 함수가없는 작업을 작성하는 것입니다. 따라서 모든 매핑 된 데이터를 작업 출력으로 직접 전달할 수 있습니다. 작업에 대한 감속기의 수를 0으로 설정하기 만하면됩니다.
어쩌면 간단한 해결책은 reduce 함수가없는 작업을 작성하는 것입니다. 따라서 모든 매핑 된 데이터를 작업 출력으로 직접 전달할 수 있습니다. 작업에 대한 감속기의 수를 0으로 설정하기 만하면됩니다.
그런 다음 해당 데이터에서 작동하는 각기 다른 reduce 함수에 대한 작업을 작성합니다. 이것은 매핑 된 모든 데이터를 HDFS에 저장하는 것을 의미합니다.
또 다른 방법은 모든 감축 기능을 하나의 감속기로 결합하여 각기 다른 기능에 대해 서로 다른 출력을 사용하여 여러 파일로 출력하는 것입니다. 이 기사에서는 여러 출력을 hadoop 0.19에 대해 설명합니다. 나는이 기능이 0.20.1과 함께 출시 된 새로운 mapreduce API에서 깨 졌음을 확신하지만 이전 mapred API에서도이 기능을 사용할 수 있습니다.
-
==============================
3.복합 키를 사용할 수 있습니다. 여러분이 두 종류의 감속기 'R1'과 'R2'가 필요하다고 가정 해 봅시다. 이러한 ID를 매퍼의 o / p 키에 접두어로 추가하십시오. 따라서 매퍼에서 키 'K'는 이제 'R1 : K'또는 'R2 : K'가됩니다.
복합 키를 사용할 수 있습니다. 여러분이 두 종류의 감속기 'R1'과 'R2'가 필요하다고 가정 해 봅시다. 이러한 ID를 매퍼의 o / p 키에 접두어로 추가하십시오. 따라서 매퍼에서 키 'K'는 이제 'R1 : K'또는 'R2 : K'가됩니다.
그런 다음 감속기에서 접두사를 기반으로 R1 또는 R2의 구현에 값을 전달합니다.
-
==============================
4.체인에서 다른 감속기를 사용하고 싶습니다. hadoop에서 '다중 감속기'는 동일한 감속기의 여러 인스턴스를 실행하는 것을 의미합니다. 한 번에 하나의 감속기를 달아서 첫 번째 감속기를 제외하고 모든 감속기에 대해 사소한 맵 기능을 제공 할 것을 제안합니다. 데이터 전송 시간을 최소화하기 위해 압축을 사용할 수 있습니다.
체인에서 다른 감속기를 사용하고 싶습니다. hadoop에서 '다중 감속기'는 동일한 감속기의 여러 인스턴스를 실행하는 것을 의미합니다. 한 번에 하나의 감속기를 달아서 첫 번째 감속기를 제외하고 모든 감속기에 대해 사소한 맵 기능을 제공 할 것을 제안합니다. 데이터 전송 시간을 최소화하기 위해 압축을 사용할 수 있습니다.
-
==============================
5.물론 여러 개의 감속기를 정의 할 수 있습니다. Job (Hadoop 0.20)의 경우 다음을 추가하면됩니다.
물론 여러 개의 감속기를 정의 할 수 있습니다. Job (Hadoop 0.20)의 경우 다음을 추가하면됩니다.
job.setNumReduceTasks(<number>);
그러나. 귀하의 인프라는 여러 감속기를 지원해야합니다. 즉,
그리고 물론 당신의 직업은 일부 사양과 일치해야합니다. 정확히 무엇을하고 싶은지 알지 못하면서 폭 넓은 조언 만 드릴 수 있습니다.
각 감속기 당 하나씩 여러 개의 출력 파일이 생성됩니다. 정렬 된 출력을 원한다면 모든 파일 (여러 맵 작업 - 이번에는 ...)을 읽는 다른 작업을 추가하고 하나의 감속기로 정렬하여 작성해야합니다.
지역 감속기 인 Combiner-Class도보십시오. 이는 맵에 의해 방출 된 부분 데이터보다 이미 메모리에 집계 (축소) 할 수 있음을 의미합니다. 아주 좋은 예는 WordCount-Example입니다. 지도는 각 단어를 키로 표시하고 개수를 1 (단어, 1)로 표시합니다. Combiner는지도에서 부분 데이터를 가져 와서 (,)를 로컬에서 가져옵니다. Reducer는 똑같지 만, 이제 일부 (결합 된) 단어 수는 이미> 1입니다. 대역폭을 저장합니다.
-
==============================
6.나는 아직도 당신의 문제를 다음과 같은 순서로 사용할 수 없다 :
나는 아직도 당신의 문제를 다음과 같은 순서로 사용할 수 없다 :
데이터베이스 ->지도 -> reduce (요구 사항에 따라 cat 또는 None 사용) 추출한 데이터 표현을 저장하십시오. 메모리에 들어가기에 충분히 작 으면 디스크에 저장하면 문제가되지 않을 것입니다.
또한 주어진 문제에 대한 MapReduce 패러다임의 사용은 잘못되었습니다. 단일 맵 함수를 사용하고 여러 "다른"축소 함수가 의미가 없으므로 다른 작업을 수행하기 위해 다른 시스템에 데이터를 전달하는지도 만 사용하고 있음을 보여줍니다. 당신은 hadoop이나 다른 특별한 아키텍처가 필요하지 않습니다.
from https://stackoverflow.com/questions/2333618/hadoop-one-map-and-multiple-reduce by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 파일에 하이브 쿼리 출력 (0) | 2019.06.13 |
---|---|
[HADOOP] 원사가 기존지도에 가져다주는 또 다른 이점은 무엇입니까? (0) | 2019.06.13 |
[HADOOP] HDFS 여유 공간 사용 가능 명령 (0) | 2019.06.13 |
[HADOOP] 종료 코드와 종료 상태가 스파크에 무엇을 의미합니까? (0) | 2019.06.13 |
[HADOOP] 하이브는 쉼표로 인용 된 필드에 CSV를로드합니다. (0) | 2019.06.13 |