2012-10-10 4 views
2

나는 Hadoop을 배우기 시작했고, MapReduce가 약간 혼란 스럽다. 결과가 기본적으로 키 - 값 쌍의 목록 인 작업의 경우 모든 것이 분명해 보입니다. 그러나 결과가 단일 값 (예 : 입력 소수점 제곱의 합 또는 입력 포인트의 질량 중심) 인 작업을 어떻게 해결해야하는지 이해할 수 없습니다.하둡. 결과를 하나의 값으로 줄임

한편으로는 매퍼의 모든 결과를 동일한 키에 넣을 수 있습니다. 그러나이 경우 이해할 수있는 유일한 감속기는 전체 데이터 집합 (합계 또는 평균 좌표 계산)을 관리합니다. 그것은 좋은 해결책처럼 보이지 않습니다.

이미징 할 수있는 또 다른 하나는 매퍼 결과를 그룹화하는 것입니다. 예 : 0-999를 처리 한 매퍼는 0으로 키를 생성하고, 1000-1999는 1과 동일한 키를 생성합니다. 여전히 여러 가지 감속기 결과가있는 한, 감속기 체인을 만드는 것이 필요합니다 (하나의 결과 만 남을 때까지 감속이 반복됩니다). 훨씬 더 계산 효과적이지만 약간 복잡해 보입니다.

Hadoop에는 전체 데이터를 단일 값으로 줄이는 효율을 최대화하기 위해 축소 기의 중첩을 실행하는 기성품 도구가 필요합니다. 내가 찾지 못했지만.

결과가 단일 값인 작업을 해결하는 가장 좋은 방법은 무엇입니까?

답변

1

환원 감소 측면에서 작업을 재구성 할 수 있다면 Combiners을 봐야합니다. 당신이 그것을 살펴 봐야하는 어떤 방법으로, 그것은 셔플에 금액 데이터를 크게 줄일 수 있습니다.

0

당신이 가져다 준 특정 유스 케이스에 대한 분석은 매우 중요하다고 생각합니다. 이러한 유스 케이스는 여전히 당신이 할프에서 할 수있는 일의 포괄적 인 범위에 속하며, 실제로는 처리하지 않도록 설계된 다른 것들이 있습니다. 동일한 문제를 해결해야만한다면 데이터가 너무 크다는 것을 알지 못한다면 첫 번째 방법을 따르고 두 단계 접근 방식을 따라야합니다.

+0

답변 해 주셔서 감사합니다. 그러나 두 가지 다른 대답에 접근하는 것이 더 편리하고 효율적이라고 생각됩니다. –

1

필자는 잘못된 각도에서 문제를 다루고 있습니다.

입력의 제곱을 합산해야하는 문제를 참조하십시오. 한 줄에 여러 개의 큰 텍스트 입력 파일이 있다고 가정 해 봅시다.

그러면 매퍼에서 합계를 병렬 처리 한 다음 감속기에서 합계를 합산하는 것이 가장 이상적입니다.

예컨대 :지도의 끝에

map: (input "x", temporary sum "s") -> s+=(x*x) 

, 당신은 글로벌 키를 사용하여 모든 매퍼의 일시적 합을 방출한다.

축소 단계에서는 기본적으로 매퍼의 모든 합계를 가져와 요약 합계를 계산합니다.이 값은 계산식과 관련하여 매우 작습니다 (n 배의 매퍼로 n은 매퍼의 수임). 거대한 입력 파일이므로 단일 감속기는 실제로 확장 성 병목 현상이 아닙니다.

맵퍼와 감속기 사이의 통신 비용을 줄이고 모든 데이터를 단일 감속기에 프록시하고 거기를 통해 읽으면 아무 것도 병렬 처리하지 않으려합니다.

관련 문제