2010-06-29 3 views
3

많은 양의 입력 데이터가 있는데 (하둡을 사용하는 이유입니다) 첫 번째 매퍼에 모든 데이터가 입력되어야하는 다양한 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에서 수행됩니다. 모든 작업은 전체 데이터 세트에서 가능한 한 빨리 계산되어야합니다.

답변

2
  • 이것은 현명한 접근입니까? 다른 작업 '논리의 유지 보수의 결합 이외의 그것과 본질적으로 아무 문제가있다

없습니다. 나는 디스크가 입출력 (I/O)을 약간 줄여 줄 것이라고 믿습니다. 디스크가 프로세스의 병목 현상 (작은 클러스터에서 발생할 수있는 경우)이 될 수 있습니다.

  • 더 좋은 대안이 있습니까?

각 그들이 실제 매핑 감소 연기해야 ​​할 클래스로 구성 파라미터 참조로서 받아 다소 워크-Y 매퍼 감속기 물품 신중한 수있다. 이것은 코드의 앞에서 언급 한 결합을 해결할 수 있습니다 (아마 이것에 대해 이미 생각해봤을 것입니다).

  • 끔찍한 결점이 있습니까? 내가 생각할 수있는

있는 유일한 방법은 작업 '지도 논리 중 하나가 적시에 작업을 완료하는 데 실패하면, 스케줄러는 입력 데이터의 조각을 처리하기 위해 다른 노드를 불 수 있다는 것이다; 이로 인해 중복 작업이 발생할 수 있지만 프로세스에 대해 더 많이 알지 못해도 이것이 중요한지 여부를 말하기는 어렵습니다. 감속기에 대해서도 동일하게 적용됩니다.

  • 이 접근 방식에는 맞춤형 Partitioner 클래스가 필요합니까?

아마, 당신이하는 일에 따라. 필자는 사용자 정의 출력 WritableComparable을 작성하는 경우 일반적으로 사용자 정의 파티셔닝이 필요하다고 생각합니다. 하지만, 사용자의 필요에 맞게 구성 할 수있는 라이브러리 Partitioner (예 : Text 유형의 출력을 만들고 자신의 롤링 대신 필드 구분 기호 String을 사용하는 경우)과 같은 KeyFieldBasedPartitioner가있을 수 있습니다.

HTH. 컨텍스트를 조금 더 제공 할 수 있다면 더 많은 조언을 제공 할 수 있습니다. 행운을 빕니다!

+0

감사합니다. 나는 좀 더 많은 맥락을 추가했고 그것에 대한 당신의 생각을 듣고 싶다. – stefanw

2

당신은 사용할 수 있습니다

  1. 은 모두가 하둡에서 워크 플로우를 작성하는 데 사용되는
  2. Oozie

계단식.

0

Oozie가 최선의 선택이라고 생각합니다. 그것의 워크 플로우 스케줄러. 여러 개의 hadoop 작업을 결합 할 수 있습니다. 하나의 작업 노드의 출력은 다음 작업 노드의 입력이됩니다. 그리고 어떤 액션이 실패하면 다음에 다시 실행할 때 스케줄러는 에러가 발생한 지점부터 시작합니다.

http://www.infoq.com/articles/introductionOozie