2014-09-03 2 views
1

mapreduce에 대해 배웠을 때 주요 구성 요소 중 하나는 결합 자입니다. 이는 매퍼가 출력하는 데이터 라인 수를 줄이기 위해 맵 위상의 끝에서 감속기를 본질적으로 실행하는 매퍼와 감속기 사이의 단계입니다. 처리량을 늘리는 데 필요한 데이터의 크기 (밀리미터 테라 바이트 규모)가 커짐에 따라 감축 단계가 너무 느려집니다. 나는 내 친구와 이야기를 나눴다. 그는이 역시 그의 경험이었고 결합자를 사용하는 대신 축소 단계에서 각 키로가는 값의 수를 줄이는 해시 함수를 사용하여 축소 키를 나눕니다 . 나는 이것을 시도했고 효과가 있었다. 다른 사람이 결합기 단계에서 잘 확장되지 않는 경험이 있었고 해결 방법과 함께이 문제에 대한 문서를 찾을 수없는 이유는 무엇입니까? 나는 combiner 단계 규모를 만드는 방법이 있다면 해결 방법을 사용하지 않을 것입니다.hadoop streaming mapreduce에서 결합기 사용 (mrjob 사용)

[EDIT] 여기서 결합기보다 빠르게 작동 친구가 제안한 대안의 예이다 : 맵퍼 출력

(word, hash(timestamp) % 1024), count

대신 word, count

출력이어서 거기 2 단계를 줄여 매퍼의 결과를 병합하십시오.

답변

0

나는 이것이 별개의 문제라고 생각합니다. 문제의 계산이 일부 감소를 허용하는 경우

  • 결합기은 즉, 키 튜플의 부분에서 중간 결과를 방출하고,이 결합하는 단계를 더 감소 사용, 적용 할 중간 결과. 합계 또는 평균값은 결합 자로 쉽게 이동하지만 다른 알고리즘에서는 그렇지 않습니다.

  • Reduce 단계의 성능 (확장 성)은 키 분할 기능이 고유 맵 출력 키를 감속기 슬롯에 얼마나 잘 맵핑하는지에 따라 크게 달라집니다. 훌륭한 분할자는 각 감속기 작업자에게 동일한 작업 부하를 할당해야합니다.

I합니다 (무티 테라 바이트 규모) 증가를 처리해야하는 데이터의 크기로

는 감소 단계는

에 대한 고유 아무것도 없다 엄청나게 느린됩니다 줄이기 단계가 축소되지 않는 MR 패러다임 귀하의 알고리즘은 MapReduce에 잘 맵핑되지 않을 수도 있습니다. 자신이하는 일에 대해 더 많은 정보를 제공 할 수 있다면, 우리는 알아낼 수 있습니다.

그가이 감소 단계

이 나에게 이해가되지 않습니다 각 키에 이동 값의 수를 줄일 수 해시 함수를 사용하여 키 감소 분할. 키에 해시 함수를 사용하면 각 버킷으로 이동하는 값의 수를 늘릴 수 있습니다.

+0

계산이 부분 계산을 허용하고, 설명 된 해결 방법은 결합 단계가 아닌 별도의 축소 단계와 마찬가지로 부분 계산을 수행합니다. 나는 combiner로서 이것을 할 때 왜 그렇게 느린 지 알고 싶다. 그러나 reduce 키를 partition 할 때, 잘 동작하는 것처럼 보인다. – Narek

+0

다음은 예제입니다 :'word, count'를 출력하는 대신 매퍼가'(word, hash (timestamp) % 1024), count'를 출력 한 다음 파티션 내에 단어를 추가하는 추가 축소 단계가 있습니다. 나는이 방법을 내가 처음 보았을 때 회의적 이었지만 어떻게 든 결합자를 사용하는 것보다 훨씬 빠릅니다. – Narek

+0

그리고 나서 감속기에서 나오는 부분 결과를 다시 집계 하시겠습니까? –