2012-10-13 4 views
3

문제수행 HBase를 쿼리 최적의 MapReduce

에서는 HBase를 다수의 테이블을 가지고, A는 B가, C.가 가정 할 수있는 처리해야하는 레코드 큐이다. 그것은 평균 2,500 만 레코드를 포함 할 수 있습니다. A에는 사용자 ID가 있습니다. B는 각 사용자가 수행하는 웹 사이트 히트를가집니다. B는 수십억 개의 행을 포함 할 수 있습니다. C에는 사용자에 대한 몇 가지 보조 정보가 있습니다.

우리는 MapReduce 작업을 사용하여 대기열에있는 레코드에 대한 예측 분석 (수천 개 및 수천 개의 의사 결정 트리)을 수행합니다. 질문의 범위에는 실제 분석 모델링이 포함되지 않습니다.

질문

  1. MR 작업이 예를 들어 테이블 B & C.에 애드혹 쿼리를 수행하고,지도 작업 한 수행하는 쿼리는 사용자 1 안타를 얻을 수 및 사용자 2 안타를 얻을 작업이 수행하는 쿼리를지도합니다. 이러한 히트가 동일한 지역 서버에서 끝나면 성능 (경기 조건 등)이 저하 될까요? 각 매퍼마다 하나의 지역 서버에 걸쳐있는 키가 있도록 입력 세트를 분할하는 ChainMapper (ChainReducer)와 같은 패턴이 있습니까?
  2. 필자의 초기 생각은 모든 필수 입력 (b와 c의 결과)을 포함하는 대기열을 사용하는 것이 었습니다. 이 입력은 응축됩니다 (모델링에만 필요함). 이 접근 방식은 (동시에 여러 맵 작업에 의해 지역 서버에서) 임시 쿼리를 수행하는 것을 피합니다.

다른 모든 의견을 환영합니다.

우리는 cloudera CDH 3 (hadoop, hbase)을 사용하고 있습니다.

답변

1

아주 쉽게 해결할 수는 없지만 bloomfilter + reduce join을 사용하도록 제안 할 수 있습니다.

빌드 블룸 필터 및 분석을 수행 전체 표 A

Map: B U S -> (tag 'B', keyB => value) 
    A -> (tag 'A', keyA => value) 
Reduce: reduce-join 

을 B 테이블 스캔에 영향을받는 영역을 사용하고, 스캔 B

Map: A -> BF(A), S = {regions of B} 

를 사용하여 사용자 정의 InpufFormat의 영향을받는 지역의 설정 Reduce에서 작업하십시오.

+0

예 축소 형 분석 작동합니다. – satish