2012-10-16 2 views
4

HBase는 어떻게 조회를 수행하고 레코드를 검색합니까? 예 : RDBMS의 B-Trees에 대해 HBase에서 무엇이 해당합니까?HBase는 기본 색인을 사용합니까?

[편집] 내가 HBase와는 -ROOT- 및 .meta 사용을 해결하는 방법을 이해

. 테이블을 사용하여 데이터를 보유하는 영역을 찾습니다. 그러나 로컬 조회는 어떻게 수행됩니까?

더 나은 설명하려면, 여기 예제 :

  1. 나는 키 77와 기록에 대한 검색을 (GET 또는 스캔) 시작하고
  2. HBase를 클라이언트는 키가 50 ~ 100에 포함되어 있음을 수치 영역 이 RegionServer에서 보유 X.
  3. HBase 클라이언트가 RegionServer X에 연결하여 데이터를 가져옵니다.

어떻게 RegionServer X가 레코드 77의 위치를 ​​찾습니까?

RegionServer는 지역 키에 대해 일종의 조회 테이블 (예 : RDBMS의 B- 트리)을 사용합니까? 50에서 77까지의 레코드에 대해 StoreFiles의 모든 내용을 읽어야합니까?

답변

4

TL : DR : HBase (BigTable과 유사)는 B + 트리와 비슷한 구조로 검색을 수행합니다. 따라서 행 키는 기본 인덱스

긴 대답 (기본적으로 HBase와의 어떤 종류의 유일한 인덱스입니다.) :

: HBase와는 다음과 같은 방법을 운영하고 같이이 Cloudera blog post about HBase write path에서, 그것은 보인다

각 HBase를 테이블은 호스팅 세 가지 범주로 가을 서버의 설정에 의해 관리됩니다 :

  • 하나의 활성 마스터 서버
  • 하나 이상의 백업 마스터 버리는 적이있는
  • 많은 지역 서버는

지역 서버는 HBase를 테이블 처리에 기여한다. HBase 테이블은 커질 수 있으므로 영역으로 분할됩니다. 각 지역 서버는 이러한 지역 중 하나 이상을 처리합니다.

은 다음 단락에서 좀 더 상세하게있다 :

행 키가 정렬되어 있기 때문에, 서버가있는 키 관리하는 지역을 결정하기 쉽습니다. ... 각 행 키는 지역 서버가 서비스하는 특정 영역에 속합니다. 따라서 put 키 또는 삭제 키를 기반으로 HBase 클라이언트는 적절한 지역 서버를 찾을 수 있습니다. 에서 먼저 ZooKeeper 쿼럼에서 -ROOT- 영역을 호스팅하는 지역 서버의 주소를 찾습니다. 루트 영역 서버에서 클라이언트는 -META- 영역을 호스팅하는 지역 서버의 위치를 ​​찾습니다.메타 지역 서버에서 요청한 지역에 서비스를 제공하는 실제 지역 서버를 찾습니다. 이것은 3 단계 프로세스이므로 비싼 작업을 피하기 위해 지역 위치가 캐시됩니다. another Cloudera blog post에서

, 그것은 변화 보관하는 파일 시스템에서 HBase를 저장하는 데 사용되는 정확한 형식처럼 보이지만 행 키 조회를 위해 위의 메커니즘은 어느 정도 일치해야합니다.

이 메커니즘은 012 수준의 계층 구조를 사용하여 행 키 위치를 쿼리하는 Google BigTable's lookup과 매우 비슷합니다 (PDF의 4 페이지 끝 부분부터 5.1 절에서 자세한 내용을 볼 수 있습니다) : Chubby -> 루트 태블릿 -> METADATA 태블릿 -> 실제 태블릿

업데이트 : 지역 서버 자체의 조회에 대한 질문에 답하십시오. 확실하지 않지만 행 키가 정렬되어 있기 때문에 HBase는 시작 및 종료 키를 사용하여, 나는 그것이 각각 빠른 log (n) 및 log (log (n)) 인 binary search 또는 interpolation search을 사용한다고 생각합니다. 나는 정렬 된 키에 대한 검색이 몇 가지 효율적인 솔루션을 가지고있는 잘 알려진 문제이기 때문에 HBase가 시작 행 키부터 찾을 필요가있는 행까지 스캔 할 필요가 없다고 생각합니다.

+0

Google '태블릿'은 HBase '지역'과 동일합니다. 그 부분을 이해합니다. – David

+0

.META. hbase의 테이블에는 각 영역의 startRow 및 StopRow 만 포함됩니다. 내 질문은 한 hbase 영역 서버가 쿼리 할 알고, 조회를 위해 전체 데이터 파일을 읽을 필요가 있습니까? – David

+0

나는 해명에 대한 질문을 업데이트했습니다. – David