실제로 ycsb 를 이용하여 HBase 에서 성능 측정을 하는 실전 예제를 설명한다.
이 포스트를 작성하는 현 시점(2020년 1월 24일) HBase 의 최신 버전은 2.2.3이다.
내가 2.2.2를 사용하고 있으므로 2.2.2 버전에 맞춰서 작성한다.
ycsb HBase 공식 문서(아래 HBase 0.98.x 버전 페이지)를 적극 참고한다.
HBase 1.0.x 버전 및 google의 bigtable service 페이지
quick start 등의 정보가 0.98.x 문서에 있으므로 그걸 보면 되겠다.
ycsb 설치 방법은 여기를 참고한다.
HBase 를 설치하는 방법은 여기를 참고한다.
< 운영 환경 >
os는 ubuntu 16.04 에서 진행하였다.
< 실전 예제를 어떻게 진행할 예정인지 >
구체적인 ycsb 사용법은 여기를 참고한다.
아래 정해둔 단계대로 실전 예제를 진행한다.
- workload 선택
- HBase 에 미리 table 을 만듦
- 미리 만들어둔 HBase table 에 데이터를 load
- 1번에서 선택한 workload 를 실행
< workload 선택 >
나는 순수 100% read test 를 하고 싶다.
그래서 나는 workload c 를 선택하였다.
vi ./workloads/workloadc 명령어로 내용을 보면 알겠지만, read proportion 이 1로 지정되어 있다.
이 proportion 값을 어떻게 정해주느냐에 따라 workload 에서 read 를 몇 % 할지, update 를 몇 % 할지.. 등이 정해지는 것 같다.
실례로, read 와 write 를 50:50 으로 실행하는 workload a 를 뜯어보면 다음과 같이 지정되어 있다.
이로 미뤄보아 이 값만 바꿔주면 내가 원하는 대로 돌아갈 수 있도록 workload 를 직접 수정 가능한 것 같다.
< HBase 에 미리 table 을 만듦 >
HBase 에 ycsb의 데이터를 load 하기 위해선 HBase 내의 테이블을 미리 만들어두어야 한다.
hbase shell 명령어를 통해 HBase 에 접속한 후
create 명령어로, 이름은 "usertable" 이고 column family 이름은 "family" 인 테이블을 만든다.
hbase(main):001:0> n_splits = 3 # HBase recommends (10 * number of regionservers)
|
만든 테이블은 list 명령어를 통해 확인 가능하다.
만약 table 을 만들지 않은채로 ycsb의 data 를 load 하면 아래 에러가 발생한다.
site.ycsb.DBException: Table usertable does not exists
|
< HBase에 data를 load >
아래 load 명령어로 workload c에 맞는 data를 넣는다.
./bin/ycsb load hbase20 -s -P workloads/workloadc -p recordcount=3000 -cp ~/hbase-2.2.2/conf/ -p table=usertable -p columnfamily=family
|
-s 옵션을 두어 10초마다 load 명령어가 얼마나 일을 진행했는지 보이게 하였다.
-p recordcount 를 3000으로 두어서 HBase에 넣는 레코드의 양을 조절하였다. 3000만큼 사랑해
속도를 올리고 싶다면 -threads 옵션을 사용할 수 도 있다(아래 나올 run 명령어에서도 마찬가지) 참고
이제 bold 처리한 곳을 보자.
내가 2.2.2 버전을 사용하고 있기 때문에 명령어가 hbase20 이 되었다.
만약 다른 버전을 사용했더라면 명령어가 달랐을 것이다. 이를 테면 hbase14 등.
~/hbase-2.2.2/conf 는 내가 hbae를 설치했을 때 hbase configuration file(hbase-site.xml)을 저장한 곳이다.
이 path 는 각 환경마다 다르다. 설치한 사람에게 물어보자.
위의 명령어를 실행하면 아래처럼 나온다. return ok 인 것을 확인해본다.
실제 HBase에서 보면 usertable 이라는 이름의 table을 볼 수 있다.
$ hbase shell hbase(main):001:0> list hbase(main):002:0> describe "usertable"
|
usertable 내의 데이터가 ycsb에서 workload c 를 위해 넣은 데이터 되시겠다.
scan "usertable" 명령어를 통해 안의 내용을 직접 확인볼 수 있으며,
hdfs 에서 usertable 의 partition 및 각 partition 별 크기를 확인할 수 있다.
위의 hdfs 내의 usertable path 역시 각 환경마다 다르다. 처음 hbase 를 설치한 사람한테 물어보면 되겠다.
< 선택한 workload 실행 >
아래 명령어로 workload c 를 실행해본다.
./bin/ycsb run hbase20 -s -P workloads/workloadc -p operationcount=3000 -cp ~/hbase-2.2.2/conf/ -p table=usertable -p columnfamily=family
|
operationcount 옵션으로 3000개 레코드 모두에 workload 를 적용하게 하였다.
해석해보면
전체 workloadc 의 수행 시간은 5039 ms 이고
처리량은 595.35, operation(여기선 read) 한 횟수는 (레코드 개수에 따른) 3000,
평균 지연 시간은 1288.078, 최소 지연 시간은 512, 최대 지연 시간은 175103,
95번째/99번째 percentile 지연시간은 각각 3145, 3145 us 이다.
참고
https://github.com/brianfrankcooper/YCSB/tree/master/hbase098
https://songsunbi.tistory.com/62
'눈가락' 카테고리의 다른 글
[Linux] terminal 에서 google drive 데이터를 wget 으로 받는 방법 (0) | 2020.01.28 |
---|---|
[YCSB] Yahoo! Cloud Serving Benchmark S3 hands-on(실전 예제) (0) | 2020.01.28 |
[YCSB] Yahoo! Cloud Serving Benchmark MongoDB hands-on(실전 예제) (3) | 2020.01.23 |
[YCSB] Yahoo! Cloud Serving Benchmark 에서 workload 실행하는 6 단계 (0) | 2020.01.21 |
[YCSB] Yahoo! Cloud Serving Benchmark 설치하는 방법 (0) | 2020.01.21 |