일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 코딩
- 백준
- 영어
- bigdata engineering
- 용인맛집
- pyspark
- Data Engineering
- Trino
- Kafka
- Iceberg
- apache iceberg
- 코엑스맛집
- 삼성역맛집
- 자바
- 코딩테스트
- 코엑스
- hadoop
- 코테
- 개발
- 여행
- Apache Kafka
- Data Engineer
- 알고리즘
- java
- BigData
- bigdata engineer
- 프로그래머스
- 맛집
- Spark
- HIVE
- Today
- Total
지구정복
[HBase] 기본 개념 & 사용법 & Hue와 연동 본문
1. 기본 개념
1.1. Data Model
hbase는 쉽게말하면 엑셀 스프레이드 시트와 비슷하다.
참고할 점은 HBase table에 저장된 데이터(row)는 고유한 row key를 가진다.
그리고 column들은 비슷한 성격의 column들끼리 column family로 묶인다.
엑셀 스프레이드 시트로 예시를 든다면 아래와 같다.
위 스프레이드시트를 이해하기 쉽게 HBase의 Table이라고 하자.
-Row Key
row key는 각 row(데이터)의 유니크한 값으로 이 row key를 활용하여 읽고자하는 데이터를 빠르게 읽을 수 있다.
-Column Famiily
컬럼 패밀리는 유사한 컬럼들을 묶는 집합이다.
위 예시에서 info, activity라는 column family들이 존재하고
info에는 유사한 컬럼들인 name, email, age 등이 존재한다.
컬럼 패밀리를 사용하는 이유는 효과적으로 빠르게 데이터 검색이 가능하기 위함이다.
-Column
컬럼 패밀리 안에 각 컬럼들이 존재한다.
컬럼은 흔히 알고 있는 속성이다.
위 예에서 info라는 컬럼 패밀리 안에 name, email, age 등의 세 개의 컬럼이 존재하고,
이 속성들의 값으로는 user1, user1@naver.com, 30임을 알 수 있다.
그리고 hbase에서는 이를 아래와 같이 표현한다.
컬럼패밀리명:컬럼명
=>
info:name, info:email ...
-Namespace
여러 개의 hbase table들을 보관하는 데이터베이스이다.
rdbms의 데이터베이스라고 생각하면 된다.
또한 test_nm이라는 namespace에 위 예시의 test_table이 있을 때 아래와 같이 표현한다.
test_nm:test_table
또한 HBase가 내부적으로 사용하는 meta 테이블도 존재하는데 풀권한이 있는 사용자는 건드리지 않도록 주의한다.
hbase:meta
1.2. Architecture
주요 프로세서는 다음과 같다.
-HBase Master
HMaster는 HBase의 핵심 프로세서로서 클러스터 내 모든 리전서버들을 모니터링하고 모든 메타데이터 변경사항을 위한 인터페이스 역할을 한다.
주로 HDFS의 NameNode가 설치된 서버에 같이 설치된다.
Region Server에 Region을 할당한다.
-RegionServer
HBase Region들을 관리하고 제공하는 역할을 한다.
보통 HDFS의 DataNode설치된 서버에 같이 설치된다.
그리고 실제 HBase table들은 각각 쪼개져서 분산저장되거나 처리된다.
이때 저장 및 처리될 때의 쪼개지는 단위를 살펴보면 다음과 같다.
Table (HBase table)
Region (Regions for the table)
Store (Store per ColumnFamily for each Region for the table)
MemStore (MemStore for each Store for each Region for the table)
StoreFile (StoreFiles for each Store for each Region for the table)
Block (Blocks within a StoreFile within a Store for each Region for the table)
-Regions
리젼이란 hbase table을 row key의 범위로 나눠놓은 단위이다.
예를들면 user001~user10000까지가 하나의 region으로 나뉠 수 있다.
즉, Hbase Table을 여러 개 쪼개놓았을 때 그 하나를 의미.
이러한 region들은 region server에서 관리된다.
-Store
column family들 중에 하나의 column family
위 예시에선 info가 하나의 스토어이다.
-MemStore
HBase 테이블에 새로운 쓰기 작업시 일단 새로운 데이터는 임시적으로 memstore라는 인메모리 버퍼에 작성된다.
그 이후에 디스크에 파일로 저장된다.
파일로 디스크에 저장되는 것이 StoreFile이다.
-StoreFile(HFile)
멤스토어에서 디스크의 파일로 쓰여진 것들을 의미한다.
-Block
StoreFile 내부의 단위이다.
스토어파일은 블록들로 이루어져 있다.
각 블록은 여러 개의 rows/columns 값을 가지고 있다.
도서관에 비유하면 다음과 같다
2. 기본 쿼리 사용법
HBase Client가 설치된 서버면 hbase shell 실행가능
- HBase shell 실행
hbase shell |
- 네임 스페이스
# 네임스페이스 목록 list_namespace # 네임스페이스 생성 create_namespace '네임스페이스 명' hbase:011:0> create_namespace 'my_test' # 네임스페이스 삭제 drop_namespace '네임스페이스 명' hbase:011:0> drop_namespace 'my_test' |
- 테이블
# 테이블 생성시에는 무조건 컬럼패밀리를 추가해줘야한다. create '테이블 명', 'column family 1', 'column family 2' hbase:012:0> create 'my_test:test_tbl', 'column_family1' Created table test_tbl Took 1.1668 seconds => Hbase::Table - test_tbl # 테이블 목록 조회 list hbase:013:0> list TABLE test_tbl 1 row(s) Took 0.0090 seconds => ["test_tbl"] hbase:020:0> list_namespace_tables 'my_test' TABLE test_tbl 1 row(s) Took 0.0059 seconds => ["test_tbl"] # 데이터 입력 put '테이블 명', 'row key', '컬럼 패밀리 : 컬럼 명', '입력 값' hbase:022:0> put 'my_test:test_tbl', 'user1', 'column_family1:name', 'Lee' Took 0.0307 seconds hbase:023:0> put 'my_test:test_tbl', 'user2', 'column_family1:name', 'Jung' Took 0.0076 seconds hbase:024:0> put 'my_test:test_tbl', 'user3', 'column_family1:name', 'Kim' Took 0.0058 seconds # 데이터 수정 put '테이블 명', 'row key', '컬럼 패밀리 : 컬럼 명', '신규 입력 값' # row의 모든 데이터 삭제 deleteall '테이블 명', 'row key' # 테이블 조회 scan '테이블 명' hbase:025:0> scan 'my_test:test_tbl' ROW COLUMN+CELL user1 column=column_family1:name, timestamp=2025-05-08T23:12:35.786, value=Lee user2 column=column_family1:name, timestamp=2025-05-08T23:12:49.944, value=Jung user3 column=column_family1:name, timestamp=2025-05-08T23:13:02.667, value=Kim 3 row(s) Took 0.0298 seconds # 데이터 삭제 delete '테이블 명', 'row key', '컬럼명', '타임스탬프' hbase:032:0> delete 'my_test:test_tbl', 'user3', 'column_family1:name' Took 0.0071 seconds hbase:033:0> scan 'my_test:test_tbl' ROW COLUMN+CELL user1 column=column_family1:name, timestamp=2025-05-08T23:12:35.786, value=Lee user2 column=column_family1:name, timestamp=2025-05-08T23:12:49.944, value=Jung 2 row(s) Took 0.0077 seconds # 데이터 조회 get '테이블 명''키' hbase:036:0> get 'my_test:test_tbl', 'user1' COLUMN CELL column_family1:name timestamp=2025-05-08T23:12:35.786, value=Lee 1 row(s) Took 0.0046 seconds # 문서 개수 조회 count '테이블 명' hbase:034:0> count 'my_test:test_tbl' 2 row(s) Took 0.0340 seconds => 2 # 테이블 운영 / 정지 enable '테이블 명' disable '테이블 명' hbase:037:0> disable 'my_test:test_tbl' Took 0.7885 seconds # 테이블 운영 / 정지 확인 is_enabled '테이블 명' is_disabled '테이블 명' hbase:038:0> is_enabled 'my_test:test_tbl' false Took 0.0158 seconds => false hbase:039:0> is_disabled 'my_test:test_tbl' true Took 0.0126 seconds => true # 테이블 삭제 drop '테이블 명' hbase:044:0> drop 'my_test:test_tbl' Took 0.3307 seconds # 테이블 데이터 삭제 truncate '테이블 명' |
* 테이블 삭제/수정은 반드시 테이블이 정지(disable)된 상태여야만 가능
- 권한 설정
# 권한 확인 user_permission '테이블 명' # 권한 부여 grant '계정명' # 권한 삭제 revoke '계정명' |
3. Apache Hue에서 HBase사용하기
먼저 hue설정에서 아래 두 개 켜준다.
hue-hbase-module-enabled = true
hue-phoenix-module-enabled = true
hue.ini 파일에 아래 설정들이 되어있어야하고 HBase master가 실행되고 있는 서버와 포트 방화벽이 해제되어 있어야 한다.
########################################################################### # Settings to configure HBase Browser ########################################################################### [hbase] # Comma-separated list of HBase Thrift servers for clusters in the format of '(name|host:port)'. # Use full hostname with security. # If using Kerberos we assume GSSAPI SASL, not PLAIN. hbase_clusters={{hbase_cluster}} # HBase configuration directory, where hbase-site.xml is located. hbase_conf_dir={{hbase_conf_dir}} # Hard limit of rows or columns per row fetched before truncating. truncate_limit = {{hbase_truncate_limit}} # 'buffered' is the default of the HBase Thrift Server and supports security. # 'framed' can be used to chunk up responses, # which is useful when used in conjunction with the nonblocking server in Thrift. thrift_transport={{hbase_thrift_transport}} |
아래처럼 하드코딩해도 된다.
{{hbase_cluster}} -> (hbase_master_server1|hbase_master_server1.fqdn:9090)
{{hbase_conf_dir}} -> /etc/hbase/conf (hbase conf디렉터리 경로)
{{hbase_truncate_limit}} -> 500
{{hbase_thrift_transport}} -> buffered
Hbase의 region server thrift port는 HBsae설정값에서 확인가능하다.
기존에는 아래 값이 9092였는데 9090으로 변경해주었다.
그리고 hue에서 hbase thrift server로 연결이 되려면 hbase의 thrift server jvm에 -threadpool이란 옵션을 설정해주어야 한다.
export HBASE_THRIFT_OPTS="-Dthreadpool" |
그리고 Hbase 재기동해준다.
hbase thrift server가 정상동작하는지 서버에서 직접 확인한다.
근데 Phoenix를 사용하면 sql문법을 사용해서 편리하지만 결국 Hbase의 table을 RDB형태로 표현해서 사용하는 것이라서
완전한 HBase table을 사용할 수 없다.
예를 들면 column family 등도 생성하거나 추가할 수 없다.
또한 기존에 hbase shell로 생성한 Hbase table을 Phoenix에서 읽을 수 없다.
따라서 Phoenix는 단순히 HBase를 데이터 저장소로 사용하는 SQL RDB? 라고 생각하면 된다.
그러므로 Hue에서 HBase를 조회하고 다루려면 Hue Editor 말고 왼쪽 메뉴 탭의 HBase메뉴를 사용해야 한다.
아래와 같이 Hbase table들을 확인할 수 있다.
SYSTEM.*은 건드리지 않는다.
New Table을 사용해서 Hbase table을 생성할 수 있다.
참고로 테이블 생성후 만약 새로운 column family를 추가하려면 hue에선 불가능하고 hbase shell에서 직접 해줘야 한다.
아래와 같이 생성됐다.
클릭하면 현재는 아무런 row가 없다고 나온다.
New Row를 클릭하여 데이터를 추가해보자.
아래와 같이 row key 적어주고
컬럼패밀리:컬럼명, 값 형태로 적어주는데
이때 숫자는 바로 적을 수 없어서 쌍따옴표로 묶어준다.
즉, Hbase에는 직렬화된 상태로만 적을 수 있어서 숫자를 바로 적을 수 없다.
추가하면 아래와 같다.
더 자세한 내용은 아래 유튜브 설명을 참고한다.
https://youtu.be/jmcwYCxSwq0?si=7VBd9tUHPsX3Phop
3.1. 일반 계정으로 사용하기
Hue에서 그룹에 권한을 부여해야지 Hbase에 쓰기 작업을 할 수 있다.
권한이 없으면 테이블 조회만 가능하다.
Hue에 Admin계정으로 접속한다.
(여기서는 hdfs가 admin계정이다.)
'Administrator Users' - '권한' - hbase검색하여 아래 클릭
아래처럼 권한을 부여할 Hue group을 체크한다.
이제 해당 그룹에 속하는 계정으로 접속해서 버튼이 활성화됐는지 확인한다.
4. Ranger 권한관리
이제 Ranger를 이용해서 사용자별 권한관리가 동작하는지 확인해본다.
일단 위에서 사용했던 test_my를 사용한다.
일반 계정에게는 아래처럼 read, execute권한만 부여한다.
일반계정으로 테이블에 row를 작성해본다.
일단 hbase shell의 cli환경에서 시도해본다.
아래와 같이 hbase shell을 실행한 계정에 권한에러가 발생한다.
하지만 Hue에선 현재 데이터 추가가 가능하다.
이것도 휴에서 권한관리가 가능한 것으로 보인다.
'데이터 엔지니어링 정복 > Hbase' 카테고리의 다른 글
[HBase] 기본 명령어(테이블 만들기, put, get, drop) (0) | 2021.05.08 |
---|---|
[HBase] HBase 개념 및 구성요소 (0) | 2021.05.07 |