벌크 데이터 생성 도구

벌크 데이터 생성 도구 (Bulk Data Generator Tool)

BulkDataGeneratorTool은 테스트 목적으로 대량의 데이터를 담은 HBase 테이블을 빠르게 만들어 주는 도구예요. 단일 컬럼 패밀리로 테이블을 미리 분할해 만들고, MR 작업으로 HFiles를 생성해 벌크 로드하는 방식이에요.

출처: 문서

본문

사용법 (Usage)

usage: hbase org.apache.hadoop.hbase.util.bulkdatagenerator.BulkDataGeneratorTool <OPTIONS> [-D<property=value>]*
 -d,--delete-if-exist         If it's set, the table will be deleted if already exist.
 -h,--help                    Show help message for the tool
 -mc,--mapper-count <arg>     The number of mapper containers to be launched.
 -o,--table-options <arg>     Table options to be set while creating the table.
 -r,--rows-per-mapper <arg>   The number of rows to be generated PER mapper.
 -sc,--split-count <arg>      The number of regions/pre-splits to be created for the table.
 -t,--table <arg>             The table name for which data need to be generated.

예시:

hbase org.apache.hadoop.hbase.util.bulkdatagenerator.BulkDataGeneratorTool -t TEST_TABLE -mc 10 -r 100 -sc 10

hbase org.apache.hadoop.hbase.util.bulkdatagenerator.BulkDataGeneratorTool -t TEST_TABLE -mc 10 -r 100 -sc 10 -d -o "BACKUP=false,NORMALIZATION_ENABLED=false"

hbase org.apache.hadoop.hbase.util.bulkdatagenerator.BulkDataGeneratorTool -t TEST_TABLE -mc 10 -r 100 -sc 10 -Dmapreduce.map.memory.mb=8192

개요 (Overview)

테이블 스키마 (Table Schema)

이 도구는 단일 컬럼 패밀리, 즉 cf와 9개 컬럼을 가진 HBase 테이블을 생성해요.

ORG_ID, TOOL_EVENT_ID, EVENT_ID, VEHICLE_ID, SPEED, LATITUDE, LONGITUDE, LOCATION, TIMESTAMP

행 키는 다음과 같아요.

<TOOL_EVENT_ID>:<ORGANIZATION_ID>

테이블 생성 (Table Creation)

이 도구는 "split-count" 분할(즉 split-count + 1개의 region)을 갖는 미리 분할된(pre-splited) HBase 테이블을 만들고, 순차적인 6자리 region 경계 접두사를 사용해요. 예: "split-count"가 10으로 테이블을 생성하면, 다음 시작-끝 키로 (10+1)개의 region이 생겨요.

(-000001, 000001-000002, 000002-000003, ...., 000009-000010, 0000010-)

데이터 생성 (Data Generation)

이 도구는 MR 작업을 생성·실행해 HFiles를 만들고, 이를 org.apache.hadoop.hbase.tool.BulkLoadHFilesTool을 통해 테이블 region에 벌크 로드해요. 매퍼 수는 입력에서 "mapper-count"로 정의돼요. 각 매퍼는 "records-per-mapper"개의 행을 생성해요.

org.apache.hadoop.hbase.util.bulkdatageneratorBulkDataGeneratorRecordReader는 각 매퍼가 생성한 레코드가 1부터 "records-per-mapper"까지의 인덱스(키에 추가됨)와 연결되도록 보장해요.

각 행의 TOOL_EVENT_ID 컬럼은 6자리 접두사를 가져요.

(index) mod ("split-count" + 1)

예를 들어, 각 매퍼가 10개의 레코드를 생성하고 "split-count"가 4라면, 각 레코드의 TOOL_EVENT_ID는 다음 접두사를 가져요.

Record Index TOOL_EVENT_ID's first six characters
1 000001
2 000002
3 000003
4 000004
5 000000
6 000001
7 000002
8 000003
9 000004
10 000005

TOOL_EVENT_ID는 행 키의 첫 번째 속성이고, 테이블 region 경계도 6자리 순차 접두사의 시작-끝 키를 갖기 때문에, 이는 각 매퍼가 각 region에 (거의) 같은 수의 행을 생성하게 해 데이터가 균등하게 분포되도록 보장해요. TOOL_EVENT_ID 접미사와 행의 다른 컬럼들은 임의(랜덤) 데이터로 채워져요.

생성되는 행 수는 다음과 같아요.

rows-per-mapper * mapper-count

각 행의 크기는 (대략) 다음과 같아요.

850 B

실험 (Experiments)

이 결과는 자체 관리 테스트 환경에서 HBase와 Hadoop 서비스가 실행 중인 11노드 클러스터에서 나온 것이에요.

Data Size Time to Generate Data (mins)
100 GB 6 minutes
340 GB 13 minutes
3.5 TB 3 hours 10 minutes

더 알아보기 (Learn more)

Bulk Loading, HDFS 등 HBase에 대용량 데이터를 적재하고 저장하는 방법에 관한 문서를 이어서 보시길 권해요.