2017-10-01 2 views
-4

나는 Mapreduce 개념을 배우고 있습니다. 그리고 이해하고자하는 학습 사례 연구가 하나있었습니다.지난 50 년간 가장 높은 온도의 도시 찾기

지난 50 년간 5 개 도시 (A, B, C, D, E) 온도 데이터가 있는데이 쿼리에서지도 축소가 어떻게 작동하는지 말하시겠습니까? 그것들은 최종 결과를 얻으려면 2 가지 이상의 수준의 감속기 그룹이 필요하다고 생각합니다. (이것은 올바른 하둡 맵에서 프레임 워크를 줄일 수 있습니까?)

단계 : 지난 50 년의

50 개 도시 데이터 (HDFS)을

분할을 세 덩어리 (매퍼 1 매퍼 2, 매퍼 3으로, 이것들은 클러스터의 다른 노드입니다. 맞습니까?)

셔플 정렬 (이 위치에는 하나의 질문도 있습니다. 코드가 데이터 청크에서 실행되는 곳입니까?) 최대 값을 가진 도시를 어디에서 알 수 있습니까? 그 특정 데이터 덩어리의 온도.

감속기 - 차선 구분 및 셔플의 최대 온도가있는 도시가 감속기에 나옵니다.

내 질문은 똑같은 감속기가 최대 기온 인 도시를 알아 내거나 감속기를 한 대 더 설치하면 최대 기온으로 도시를 픽업 할 수 있습니까?

두 번째 질문은, (Mapper 또는 Sort Shuffle 또는 Else) 코드가 데이터 작업을 시작하는 시점입니까?

답변

1

Mapper가 지난 50 년간 모든 도시 데이터를 출력하도록하십시오. 돼지 또는 스파크를 사용하는 경우 filter 명령을 사용하십시오. HIVE는 WHERE 절이됩니다. 그렇지 않으면 간단한 코드 if-else입니다.

이론상으로, 지난 50 년 동안의 온도로 모든 도시를 모은 하나의 감속기를 가져 와서 모두 스캔 할 수는 있지만 MapReduce의 병렬성은 무의미합니다. 여러지도/축소 단계에 문제가 없습니다. 사실, Pig, Hive, Cascading 및 다른 모든 상위 수준의 MR 도구가 바로 그 기능을 수행합니다.

이렇게 (첫 번째) 감속재에는 주어진 도시의 온도 콜렉션이 전달됩니다. 최대 값을 찾은 다음 (도시, 최대) 튜플을 출력합니다. 각 감속기는 각 도시마다 한 줄당 하나의 튜플을 출력합니다.

매퍼는 이전과 동일한 InputFormat을 사용할 수 있지만 이번에는 Reducer를 사용하여 이전에 피한 모든 도시를 수집 할 수 있습니다. 이 시간은 더 적은 양의 데이터가 뒤섞이기 때문에 더 효율적입니다. 그런 다음 절대 최대 값을 찾을 수 있습니다.

하이브에서는 단순히 ORDER BY temp DESC LIMIT 1을 덧붙여서 답을 얻었을뿐입니다. 세 조각으로

분할을 (매퍼 1 매퍼 2, 매퍼 3, 이러한 클러스터의 다른 노드가 있습니다 내가 수정 있습니까?)

지도 작업이 동일한 노드에서 실행하고, 이상적으로 실행할 수 있습니다 데이터에 대한 HDFS 블록이있는 곳이면 어디든 가능합니다. 매퍼의 양은 블록 크기, InputSplits 및 입력 파일의 크기에 의해 제어됩니다.

코드는 모든 단계에서 데이터로 실행됩니다.The output of the mapper will optionally be sent to a Combiner, a Partitioner, then shuffled and sorted to a Reducer

+0

cricket_007, Map1 결과에 최대 온도가 동일한 두 도시 (예 : a, b)가 있고 Map2가 최대 온도와 Map3의 두 도시 (예 : b, c)의 출력을 갖는 경우, (도시 1의 경우) 두 개의 매퍼 (지도 1과지도 2)에서 도시의 두 값을 보유하는 감속기는 동일한 온도를 가질 수 있습니다. 또는 다를 수 있습니다. 그래서 그것이 더 일하는 방법, 나는 당신이이 조건을 해결하기 위해 어디에서, 또는 별개라고 말했던 것처럼 어떤 가동이라도 이용할 수있는 것을 의미한다? 감속기 자체가 출력 파일입니까, 아니면 전송합니까? – LearnJava

+0

나는 당신이 방금 말했던 것을 이해하지 못한다. 그러나 얼마나 많은 사람들이 있든 상관없이 같은 값을 갖는 것은 감속기에 문제가되지 않는다. –

+0

좋아. 나는 다른 감속기가 다른 데이터 출력을 가지고 있는지 물어 본다. HDFS. 그렇다면 어떻게 작동합니까? 다중 감속기의 모든 결과를 단일 출력에 추가 한 다음 그 중 하나의 결과를 계산합니까? – LearnJava

관련 문제