2013-11-28 5 views
0

일부 HDFS 데이터를 기존 HBase 테이블로 가져 오려고합니다. 필자가 가지고있는 테이블은 2 개의 열 패밀리와 HBase가 새로운 테이블을 생성 할 때 함께 제공하는 모든 기본 설정으로 생성되었습니다. 테이블에 이미 많은 양의 데이터가 채워져 있으며 98 개의 온라인 지역이 있습니다. 행 키 유형은 2-CHARS_ID + 6-DIGIT-NUMBER + 3 X 32-CHAR-MD5-HASH의 형식으로되어 있습니다.HBase 대량로드 사용

키의 예 : IP281113ec46d86301568200d510f47095d6c99db18630b0a23ea873988b0fb12597e05cc6b30c479dfb9e9d627ccfc4c5dd5fef.

가져 오려는 데이터가 HDFS에 있으며지도 읽기 프로세스를 사용하여 읽습니다. HDFS 파일에서 읽은 각 행에 해당하는 내 매퍼에서 Put 객체를 내 보냅니다. 기존 데이터에는 모두 "XX181113"으로 시작하는 키가 있습니다. 작업이 구성되어 있습니다 : 나는이 과정을 시작하면

HFileOutputFormat.configureIncrementalLoad(job, hTable) 

, 나는 그것 (테이블이있는 온라인 지역과 동일) 98 감속기로 구성 볼 수 있지만 문제가 4 감속기가의 100 %를 가지고 있다는 것입니다 데이터는 그들 사이에서 나뉘었고 나머지는 아무것도하지 않았다. 그 결과 매우 큰 크기의 폴더 출력이 4 개 밖에 없습니다. 이 파일은 테이블에 가져올 수있는 새로운 4 개의 regions에 해당합니까? 그렇다면 왜 4 개, 98 개 감속기가 만들어 지나요? 읽기 HBase를 워드 프로세서

In order to function efficiently, HFileOutputFormat must be configured such that each output HFile fits within a single region. In order to do this, jobs whose output will be bulk loaded into HBase use Hadoop's TotalOrderPartitioner class to partition the map output into disjoint ranges of the key space, corresponding to the key ranges of the regions in the table. 

더욱 내가이 동작을 얻을 왜 나를 혼란.

감사합니다.

답변

0

얻을 수있는지도의 수는 테이블에있는 지역의 수에 의존하지 않고 데이터가 영역으로 분할되는 방식입니다 (각 영역에는 키 범위가 포함됨). 모든 새 데이터가 동일한 접두사로 시작한다고 언급 했으므로 일부 지역에만 적합 할 것입니다. 새로운 데이터가 더 많은 지역으로 나뉘어 지도록 테이블을 미리 분할 할 수 있습니다.

+0

감사합니다. 실제로 사전 분할이 트릭을 수행했습니다. –