2016-10-06 7 views
0

저는 MapReduce 프레임 워크에 관해 꽤 혼란 스럽습니다. 그것에 대해 다른 출처에서 읽는 것을 혼란스럽게합니다. 그건 그렇고, 이것이 MapReduce 욥의 나의 생각이다.셔플 위상과 결합기 위상의 차이점은 무엇입니까?

1. Map()-->emit <key,value> 
2. Partitioner (OPTIONAL) --> divide 
    intermediate output from mapper and assign them to different 
    reducers 
3. Shuffle phase used to make: <key,listofvalues>  
4. Combiner, component used like a minireducer wich perform some 
    operations on datas and then pass those data to the reducer. 
    Combiner is on local not HDFS, saving space and time.  
5. Reducer, get the data from the combiner, perform further 
    operation(probably the same as the combiner) then release the 
    output.  
6. We will have n outputs parts, where n is the number 
    of reducers 

그것은 기본적으로 맞습니까? 내 말은, 나는 combiner가 셔플 페이즈이고 기본적으로 각 레코드를 키에 의해 groupby라고 말하는 몇 가지 소스를 찾았습니다. ...

+0

메시지의 번호는 각 작업이 수행되는 순서를 나타 냅니까? – Amit

+0

예, 제 마음 속에는 그렇습니다. – rollotommasi

+0

어쨌든, 나는 아래 답변이 그 요점을 설명한다고 생각한다. – Amit

답변

0

각 노드 내에서 맵 작업의 출력에만 작동하는 소형 감속기 단계로 생각하십시오 그것을 실제 감속기로 내 보낸다.

고전적인 WordCount 예제를 사용하면 맵 작업이 처리하는 각 단어에 대해 맵 단계 출력이 (단어, 1)이됩니다. 처리 할 입력을 가정하자 것은 결합기없이

"그녀는 인도에서 큰 도시의 외곽에 큰 주차장과 함께 큰 집에서 살았습니다"

이다,지도 단계는 방출 것 (큰, 1)을 세 번, (a, 1)을 세 번, (을, 일) 두 번. 그러나 결합기가 사용될 때지도 위상은 (크게, 3), (a, 3) 및 (in, 2)을 방출합니다. 이 단어 각각의 개별 어커런스는 단계를 줄이기 위해 출력을 내기 전에지도 단계 내에서 로컬로 집계됩니다. Combiner를 사용하는 경우에는 로컬 집계로 인해지도에서 네트워크 트래픽이 최소화되도록 최적화됩니다.

셔플 단계에서 다양한지도 단계의 출력이 올바른 감속기 단계로 리디렉션됩니다. 이것은 프레임 워크에 의해 내부적으로 처리됩니다. 분할자가 사용되는 경우 적절히 줄이려면 입력을 셔플하는 것이 좋습니다.

+0

이 튜토리얼을 보도록하겠습니다. [link] https://developer.yahoo.com/hadoop/tutorial/module4.html#functionality [/ link] 하지만 결합자가 어떻게 합을 만들 수 있습니까? 셔플 단계가 아직 수행되지 않았습니까? 제 말은 값 목록에있는 값을 합산하기 위해서 셔플 단계 이후에 머물러야한다는 것입니다. IMHO, 결합기는 입력으로받은 데이터의 종류에 따라 셔플 단계 이전 또는 직후에 작동 할 수 있습니다. 예를 들어, wordcount에서 결합자는 각 파티션의 합계를 수행 한 다음 hdfs의 실제 감속기로 이동합니다. 무슨 뜻인지 알 겠어? 감사합니다 – rollotommasi

0

나는 결합기가 셔플 및 정렬 단계의 일부라고 생각하지 않습니다. Combiner는 자체 작업 라이프 사이클 단계 중 하나입니다 (선택 사항). > 파티션 - -> 컴 (옵션) - 정렬> 임의 재생과 -> 다음 단계 중,지도, 파티션 및 결합기를

을 줄 지도 :

이 단계의 파이프 라인처럼 될 수있다 동일한 노드에서 작동합니다. Hadoop은 Reduce Phase를 실행할 노드를 동적으로 선택하여 가능한 가장 좋은 방법으로 리소스의 가용성과 액세스 가능성에 의존합니다. 셔플 및 정렬, 중요한 중간 단계는 맵 및 축소 노드에서 작동합니다.

클라이언트가 작업을 제출하면 Map Phase는 노드 전체에 블록 형태로 저장된 입력 파일에서 작업을 시작합니다. 매퍼는 파일의 각 행을 하나씩 처리하고 생성 된 결과를 100MB의 메모리 버퍼 (각 매퍼에 대한 로컬 메모리)에 저장합니다. 이 버퍼가 특정 임계 값까지 채워지면 (기본적으로 80 %),이 버퍼가 정렬되어 디스크 (파일)에 저장됩니다. 각 매퍼는 중간 정렬 된 분할 또는 파일을 여러 개 생성 할 수 있습니다. Mapper가 블록의 모든 라인을 처리 할 때, 모든 그러한 분할은 병합되어 (하나의 파일을 형성하기 위해), (키에 기초하여) 정렬되고, Combiner 단계는이 단일 파일에서 작동하기 시작합니다. Paritition 단계가 없으면 하나의 중간 파일 만 생성되지만 Parititioning의 경우 개발자 논리에 따라 여러 파일이 생성됩니다. 아래의 이미지 Oreilly Hadoop : The Definitive guide,이 개념을 더 자세히 이해하는 데 도움이 될 수 있습니다.

enter image description here

이후, 하둡 사본은 키 값에 따라 감속기 노드에 매퍼 각 노드에서 파일을 합병했다. 즉 동일한 키의 모든 레코드가 동일한 감속기 노드에 복사됩니다.

SS 및 Reduce Phase 작업에 대해 깊이 알고있을 수 있으므로 자세한 내용은 다루지 않을 것입니다.

자세한 내용은 Oreilly Hadoop : The Definitive guide를 읽어 보시기 바랍니다. Hadoop을위한 멋진 책.

+0

파티션은 선택 사항이 아니며 기본 파티션을 무시하는 것은 선택 사항입니다. – vefthym

0

조합기는 셔플 링 단계와 전혀 비슷하지 않습니다. 당신이 셔플을하는 것이 잘못되었습니다. 그것은 당신의 혼란의 뿌리입니다.

셔플 링은지도에서 키를 복사하여 복사하기 때문에 키 생성과 관련이 없습니다. 이것은 감속기의 첫 번째 단계이며 다른 두 개는 정렬 후 감속합니다.

을 결합하는 것은 각 매퍼의 출력에 대해 감속기를 로컬에서 실행하는 것과 같습니다. 그것은 기본적으로 감속기 (감속기 클래스도 확장)처럼 작동합니다. 즉, 감속기처럼 매퍼가 동일한 키에 대해 내 보낸 로컬 값을 그룹화합니다.

분할 영역은 사실 맵 축소 출력에 맵 출력 키를 지정하지만 선택 사항은 아닙니다. 자신의 구현으로 기본 HashPartitioner를 재정의하는 것은 선택 사항입니다.

나는이 답변을 최소한으로 유지하려고 노력했지만, Azim이 제안한 Tom White의 확실한 안내서와 this post의 관련 자료에 대한 자세한 정보를 찾을 수 있습니다.