파이썬을 이용해 HBase에 접근하기 위해선 HappyBase 라이브러리가 필요하다.
따라서 이용시엔 첫번째로 HappyBase 라이브러리를 설치를 해야한다.
나의 경우는 다수의 이미지를 입출력하는 게 목적이였고,
실행환경은 도커를 구축해 아래의 링크에 따라 설치를 진행하였다.
아래의 사이트에서 설치와 간단한 튜토리얼을 확인할 수 있다.
https://hub.docker.com/r/dajobe/hbase
정상적으로 설치가 되었을경우, 다음의 테스트로 연결을 확인할 수 있다.
import happybase
connection = happybase.Connection('hostname', 9090) #hostname = IP address, port=9090
connection.open()
Hbase에 데이터를 넣고 싶은 경우에는 테이블을 생성해야한다.
테이블 생성 시엔 테이블 구조를 적어야 하고, 테이블을 생성하는 명령어는 다음과 같은데,
나는 2개의 테이블을 생성하였다.
connection.create_table('A_imgs', { 'imgs': dict() } )
connection.create_table('B_imgs', { 'imgs': dict() } )
connection.tables()
테이블을 생성한 후에는, Hbase의 특성에 맞게 row-key, column family를 만들어 넣어야한다.
나는 Hbase를 처음으로 만지게 되면서 이해가 부족해 column family를 넣기까지 애를 좀 먹었다 ㅜㅜ
왜냐하면
1. 이미지를 넣을 땐, byte() 구조로 변경해야하고,
2.column까지만 접근하면 데이터가 불러와지는 줄 알았는데, 여기서 잘못 이해하고 있었다.
나는 row-key, column-family 만 입력하면 데이터가 접근이 끝나는 줄 알았는데, column-family가 key-value 구조로 되어있다.
다시 말하면, HBase에선 row-key,{key:value} 값까지 들어갔을 때 매칭되는 값이 리턴된다.
아무튼, 데이터를 입력하고 싶을 때 데이터를 입력하는 방법은 다음과 같다.
for filename in folder_A:
img = cv2.imread(filename, cv2.IMREAD_COLOR)
img = img.tobytes()
table.put('A_imgs', 'cf:col1': img)
for filename in folder_B:
img = cv2.imread(filename, cv2.IMREAD_COLOR)
img = img.tobytes()
table.put('B_imgs', 'cf:col1': img)
그리고, 다시 HBase에 들어간 데이터를 불러와, 이미지가 잘 들어갔는지 확인.
테이블 제거는 table에서 지원하는 메소드를 보면 delete_table이 있는데,
connection.delete_table(name) 명령어를 입력하면 된다.
참고링크
https://happybase.readthedocs.io/en/latest/
https://happybase.readthedocs.io/en/happybase-0.4/tutorial.html