문제

나는 시스템을 중단하기 위해 Hadoop에서 작은 테스트 응용 프로그램을 구축 할 생각입니다.

내가 생각한 응용 프로그램은 통계를 수행하는 영역에있을 것입니다. 리소셔 함수에서 "각 키에 대해 10 가지 최악의 값"을 갖고 싶습니다 (여기서 일부 키에 대한 수많은 값을 가정해야합니다).

내가 계획 한 것은 내 감속기에 들어가는 값은 기본적으로 "실제 값"과 "실제 값의 품질/관련성"의 조합이라는 것입니다. 관련성을 바탕으로 나는 단순히 "단순히"10 개의 최악의/최고의 값을 가져 와서 감속기에서 출력하려고합니다.

(특정 키에 대한 수많은 값을 가정) 어떻게해야합니까? 모든 값이 REDIC으로 전송하기 전에 모든 값을 정렬 할 수있는 방법이 있습니까 (처음 10을 읽었을 때 입력을 읽지 않도록) 또는 다르게 수행해야합니까?

여기 누군가가 내가 볼 수있는 예제 코드를 지적 할 수 있습니까?


업데이트 : 두 가지 흥미로운 Jira 문제를 발견했습니다 Hadoop-485 그리고 Hadoop-686.

누구든지 Hadoop 0.20 API에서 이것을 사용하는 방법에 대한 코드 조각이 있습니까?

도움이 되었습니까?

해결책

Combiner를 사용하려는 것처럼 들립니다. Combiner를 사용하는 것처럼 들립니다. 이는 Reder로 전송되기 전에 맵 측면에서 작성한 값으로 무엇을 해야하는지 정의하지만 Key로 그룹화 된 후에는 수행 할 것입니다. 콤비너는 종종 감속기 클래스로 설정됩니다 (맵 측면에서 줄인 다음 다시 감소 측면에서 줄입니다).

WordCount 예제가 결합기를 사용하여 부분 계수를 사전 컴퓨팅하는 방법을 살펴보십시오.

http://wiki.apache.org/hadoop/wordcount


업데이트여기에 내가 당신의 문제에 대해 염두에두고있는 것입니다. 그래도 당신이하려는 일을 오해 할 수 있습니다.

모든 매퍼는 방출됩니다 <key, {score, data}> 한 쌍.

결합기는이 쌍의 부분 세트를 가져옵니다. <key, [set of {score, data}> 로컬 정렬 (여전히 맵퍼 노드에) 및 출력을 수행합니다. <key, [sorted set of top 10 local {score, data}]> 한 쌍.

감속기가 얻을 것입니다 <key, [set of top-10-sets]> -값 세트의 각 멤버에 대해 Sort-Merge의 병합 단계 (정렬 필요 없음)를 수행하고 처음 10 값을 당기는 경우 병합을 중지하기 만하면됩니다.


업데이트 2

따라서 이제 우리는 순위가 cumilative로 알았으므로 결과적으로 콤바인을 사용하여 데이터를 조기에 필터링 할 수 없으므로 제안한 것을 수행하는 것입니다. 당신은 올바른 티켓을 찾았습니다. src/examples/org/apache/avese/examples/secondarySort.java의 Hadoop 20 에서이 작업을 수행하는 방법에 대한 예가 있습니다 (또는 전체 소스 트리를 다운로드하지 않으려면 예제를 볼 수 있습니다. 패치 https://issues.apache.org/jira/browse/hadoop-4545 )

다른 팁

분명히 2 차 소문과 같다. 원하는 경우 "Hadoop : The Deconitive Guide"를 살펴보십시오. 오라일리 출신입니다. 온라인으로 액세스 할 수도 있습니다. 거기서 그들은 꽤 좋은 구현을 설명합니다.

나도 혼자서 구현했다. 기본적으로 이런 식으로 작동합니다. 파티션자는 하나의 단일 감소로 이동하는 동일한 키가있는 모든 키 값 쌍을 관리합니다. 여기 특별한 것은 없습니다. 그러나 그룹화를 형성하는 그룹화 구성자가 있습니다. 한 그룹은 실제로 반복자로 통과하여 하나의 READE ()-호출을 통과합니다. 따라서 파티션에는 여러 그룹이 포함될 수 있습니다. 그러나 파티션의 양은 감속기 수와 같아야합니다. 그러나 그룹화는 또한 비교 방법을 구현하므로 정렬을 수행 할 수 있습니다.

이 방법을 사용하면 10 개의 최고/최악/최고/가장 낮지 만 키가 먼저 감속기에 도달 할 수 있습니다. 따라서이 10 개의 키를 읽은 후에는 더 이상의 반복없이 감소 방법을 남길 수 있습니다.

도움이 되었기를 바랍니다 :-)

질문을 올바르게 이해하면 TotalorderPartitioner.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top