2011-10-25 2 views
4

내 상황은 다음과 같습니다. 20 명의 노드로 구성된 Hadoop/HBase 클러스터에 3 명의 ZooKeepers가 있습니다. MapReduce를 통해 HBase 테이블에서 다른 HBase 테이블로 많은 데이터를 처리합니다.HBase는 MapReduce의 새로운 영역을 클러스터 전체에 어떻게 배포합니까?

이제 새 테이블을 만들고 출력 싱크로 해당 테이블을 사용하도록 모든 작업에 지시하면 모든 데이터가 동일한 regionserver로 이동합니다. 소수의 지역 만 있다면 놀랄 일이 아닙니다. 내가 가진 특정 테이블에는 약 450 개의 영역이 있으며 이제는 문제가 발생합니다. 대부분의 영역 (약 80 %)은 동일한 지역 서버에 있습니다!

HBase가 클러스터 전체에 새로운 영역 할당을 배포하는 방법과이 동작이 정상/원하는지 버그인지 여부에 대해 궁금합니다. 불행히도 내 코드에서 버그를 찾기 시작 해야할지 모르겠다.

내가 묻는 이유는 이것이 일자리를 엄청나게 느리게 만든다는 것입니다. 작업이 완전히 완료된 경우에만 표가 클러스터에서 균형을 유지하지만이 동작은 설명하지 않습니다. HBase가 새로운 서버를 생성하는 순간 다른 서버로 분산시켜야하지 않습니까?

입력 해 주셔서 감사합니다.

답변

0

나는 이것이 알려진 문제라고 생각합니다. 현재 HBase는 클러스터가 속한 테이블을 고려하지 않고 클러스터 전체에 영역을 분산시킵니다.

배경에 대 한 HBase를 책을 참조하십시오 : http://hbase.apache.org/book/regions.arch.html

그것은 당신이 HBase와의 이전 버전에 있는지 될 수 다음 http://comments.gmane.org/gmane.comp.java.hadoop.hbase.user/12549 이동로드 밸런싱 및 지역에 대한 설명은 다음을 참조하십시오 http://comments.gmane.org/gmane.comp.java.hadoop.hbase.user/19155

+0

감사합니다. 이제 왜 이런 식으로 발생했는지 부분적으로 알고 있습니다. 내 클러스터는 Cloudera의 CDH3에 있고 HBase는 0.90.4 버전입니다. 귀하의 의견을 통해 클러스터에 161 개의 테이블이있는 것이 문제 일 수 있다고 생각 했습니까? – bwacx

+0

hbase는 테이블을 영역 만 배포하므로 테이블을 균등하게 분산해야한다는 것을 인식하지 못합니다. 테이블이 하나만있는 경우에는 이런 일이 발생하지 않을 수 있지만 모든 사용자가 적은 수의 테이블 만 사용하도록하는 것은 적절하지 않습니다. – David

0

기본적으로 테이크 테이블을 사용하지 않고 각 RS의 영역의 균형을 조정합니다.

hbase.master.loadbalance.bytable을 가져올 수 있습니다.