많은 양의 입력 데이터가 있는데 (하둡을 사용하는 이유입니다) 첫 번째 매퍼에 모든 데이터가 입력되어야하는 다양한 MapReduce 단계로 해결할 수있는 여러 가지 작업이 있습니다.여러 개의 Hadoop MapReduce 작업을 하나로 결합하는 방법은 무엇입니까?
내 목표 : 가능한 한 빨리 다른 작업을 계산하십시오.
현재 모든 데이터에서 각각의 판독 값을 순차적으로 실행하게합니다. 필자는 작업을 결합하고 유사한 부품을 실행할 때 (매퍼에 모든 데이터를 공급하는 것과 같이) 한 번만 수행하는 것이 더 빠를 것이라고 가정합니다.
나는 이러한 작업을 어떻게 조합 할 수 있는지 궁금해했습니다. 매퍼는 모든 입력 키/값 쌍에 대해 작업 ID와 작업 관련 키 데이터가 값과 함께 포함 된 "수퍼 키"를 방출 할 수 있습니다. 이렇게하면 감속기는 작업과 작업 별 키에 대한 키/값 쌍을 가져오고 포함 된 키와 값에 대해 수행 할 수퍼 키를 볼 수 있습니다. 의사 코드에서
는 :
map(key, value):
emit(SuperKey("Task 1", IncludedKey), value)
emit(SuperKey("Task 2", AnotherIncludedKey), value)
reduce(key, values):
if key.taskid == "Task 1":
for value in values:
// do stuff with key.includedkey and value
else:
// do something else
의 핵심은 필요한 모든 정보를 포함 할 수 WritableComparable
수 있습니다.
참고 : 의사 코드는 끔찍한 아키텍처를 제시하며 더 똑똑한 방식으로 수행 될 수 있습니다.
내 질문은 :
- 이 현명한 방법인가?
- 더 좋은 대안이 있습니까?
- 끔찍한 단점이 있습니까?
- 이 접근 방식에 대해 맞춤
Partitioner
클래스가 필요합니까?
상황 : 데이터가 RDF의 일부 수백만의 구성은 4 배로하고, 작업은 클러스터, 통계 및 유사성을 계산한다. 일부 작업은 감속기의 Hadoop 카운터로 쉽게 해결할 수 있지만 일부는 여러 MapReduce 단계가 필요합니다.
계산은 결국 Amazon의 Elastic MapReduce에서 수행됩니다. 모든 작업은 전체 데이터 세트에서 가능한 한 빨리 계산되어야합니다.
감사합니다. 나는 좀 더 많은 맥락을 추가했고 그것에 대한 당신의 생각을 듣고 싶다. – stefanw