2012-06-18 3 views
3

5 노드의 HBase 클러스터가 있고 대부분 순차 데이터를 가져 오는 입력 요청을 가지고 있습니다.분할 영역을 통한 HBase로드 밸런싱

저장 용량을 최적화하기 위해로드가 많은 영역에서는 수동으로 영역 분할을 수행했지만 영역을 분할 할 때 대부분 동일한 영역 서버에 최적화하지는 않습니다.

어떻게 동일한 서버에 부하를 제어 할 수

r-1(k1 to k2) on server s1, 
r-2(k2 to k3) on server s2, 
r-3(k3 to k4) on server s3, 
r-4(k4 to k5) on server s4, 
r-5(k5 to k6) on server s5, 
r-6(k6 to k7) on server s1, 

즉은, 분할 이후에는 연속 영역은 같은 서버로 간다 이런 식으로 지역별 분할을 제어 할 수 있습니다.

+0

왜 이것이 문제의 원인이라고 생각합니까? 로드 밸런서는 기본적으로 5 분마다 한 번씩 실행되고/split regions 주변의 영역을 클러스터로드가 고르게 이동합니다. 그 정도면 충분합니다. 클러스터 간의 분배는 HDFS에 의해 처리됩니다. –

+0

답장을 보내 주셔서 감사합니다. 동일한 region-server에서 연속적인 영역을 갖는 유일한 문제는 순차적 데이터를 요청하는 동안 base.regionserver.handler.count의 제한을 초과하므로 더 많은 시간이 걸리고 일부 요청은 대기 상태가됩니다. 단지 예 –

+0

: 기본 평형화 후, I는 지역의 분포 S4에 R -2- S1에 R-3 S1에 R -4- S2에 R- 같은 - R-1이다 발견 5에 S2가 있고, S2에 r-6, S3에 r-7, s5에 r-8이 있습니다. 각 영역의 초당 요청 수는 거의 같습니다. 그러나 영역 r-4에서 r-6 사이에있는 데이터를 가져 오는 새로운 요청은 단일 서버 S-2에만 완전히 의존합니다. 연속적인 영역이 동일한 서버로 연결되지 않도록 영역 분배를 제어하는 ​​방법은 무엇입니까? 감사합니다 –

답변

0

서버로 가정하면 RegionServer를 의미합니다. 영역에는 무작위로 할당 된 영역 서버가 있으므로 클러스터가 충분히 크면이 상황이 발생하지 않아야합니다 (또는 거의 발생하지 않아야 함). 아이디어는 당신이 이것에 대해 걱정할 필요가 없다는 것입니다. 또한 regionserver는 데이터의 게이트웨이 일뿐입니다. HDFS를 사용하여 실제 데이터를 가져오고 데이터가 들어오는 곳은 HDFS에 의해 결정됩니다.

게다가, 연속 된 영역이 동일한 RS에 의해 처리되는 경우에도 멀티 스레딩을 사용하여 데이터를 더 빨리 가져올 수 있어야합니다. HBase는 이미 각 영역 AFAIK에 대해 별도의 스레드를 내부적으로 실행합니다. 일반적으로 너무 많은 부하를 발생시키지 않습니다. 이 때문에 실제로 과도한 부하가 있음을 확인 했습니까? 로드를 일으키는 것을 확인하기 위해 프로파일 링을 수행 했습니까?

이렇게해야 할 필요는 없지만 특별한 경우에는 HBaseAdmin.move 메서드를 사용하면됩니다. HTable.getRegionLocations()을 사용하여 테이블의 모든 영역을 통과하는 코드를 작성하고 시작 키에 따라 영역을 정렬 한 후 수동으로 (using HBaseAdmin.move()) 모든 연속 영역이 별도의 영역 서버에 있는지 확인하십시오. 그러나 이것이 실제로 문제가되는 것이 아닌가하는 점을 강력히 압니다.이 접근법을 시작하기 전에이를 확인하는 것이 좋습니다.

+0

감사합니다 Raze2dust, 나는 그것을 시도합니다. 그래, 코 프로세서를 실행하는 동안 단일 지역 서버에서로드를 보았습니다. & 또한 region-server-handler-count와 마찬가지로 힙 크기가 증가했지만 여전히 일부 요청은 대기 상태로 전환됩니다. 일부 지역이 다른 지역 서버에있는 경우 대기 기간보다 시간이 단축됩니다. 동일한 요청이 여러 번 발생하면 발생합니다 (~ 100). –