안단테 안단테

13. HBase 클라이언트 API 본문

IT 기술/BigData

13. HBase 클라이언트 API

안단테에 2023. 2. 6. 09:51
728x90
반응형

13. HBase 클라이언트 API

 

3. 클라이언트 API : 기본 기능

 

Hbase에 접근하는 주요 클라이언트 인터페이슨느 org.apache.hadoop.hbase.client 패키지에 있는 HTable 클래스이다

데이터를 변경하는 로우 단위의 모든 작업은 원자성이 보장된다

 -> 해당 작업이 수행되는 동안 다른 클라이언트나 스레드에서 동일한 로우에 읽기 또는 쓰기를 시도해도 아무런 문제가 없음

HTable 인스턴스는 한 번만 생성해라. 일반적으로 어플리케이션이 싲가할 때 인스턴스화 한다

스레드랑 HTable 인스턴스를 하나씩 생성해라

로우당 갱신 작업은 원자적으로 처리된다.

 

3.2 CRUD 기능

 

create, read, update, delete의미 HTable 클래스에서 제공

 

3.2.1 put 메소드

 

HBase 데이터 저장하는 메소드

Put 인스터스를 생성하기 위해서는 로우키를 제공해야됨

HBase의 로우는 고유한 로우키로 식별하는데 그 타입은 배열

 

- 데이터 비저닝

각 셀에 여러개의 버전을 저장할 수 있다.

타임스탬프를 사용하여 구현되었으며, 각 버전은 타임스탬프에 대해 내림차순정렬

scan은 최신 버전만 얻을 수 있다 {VERSION = } 명령어로

타임스탬프를 명시하지 않으면 로우 저장소에 추가되는 순간에 해당 리전 서버 전체 시작으로 자동할당

 

- KeyValue 클래스

특정 셀 하나의 데이터 및 데이터베이스 내에서의 좌표 정보를 담고 있음

좌표 정보 : 로우키, 컬럼패밀리 이름, 컬럼, 퀄리파이어, 타임스탬프

이 클래스는 좌표 정보를 많은 방식으로 조합하기 위해 수많은 생성자 제공

 

데이터 및 좌표 정보는 모두 자바의 byte[]타입 즉 바이트 배열로 저장

저수준 저장소의 데이터 타입을 이렇게 설계하는 이유는 다양한 타입의 데이터를 자유롭게 저장함

특정 데이터 타입에 있는 내부 구졸르 유지하기 위해 필요한 추가 공간을 최소화 하여 꼭 필요한 데이터만 효율적으로 저장하기 위해서임

 

데이터 비교, 타입 검증, 힙 크기 계산, 데이터 복제 가능

 

- 클라이언트 측 쓰기 버퍼

각각의 쓰기 연산은 셀제로 RPC로서 데이터를 ㅋ르라이언트에서 서버로 전송하고 되돌려 받는다

RPC : 개수 줄이는 일이 중요한 이유는 왕복 시간 -> 유선으로 패키지를 전송할 때 드는 오버헤드 의미

메시지 크기도 줄이면 좋음

 

Put 인스턴스는 일단 클라이언트 프로세스 안 메모리에 저장되기 때문에 RPC가 발생하지 않는다

버퍼를 사용하는 경우에도 HBase 클라이언트에 투명하게 처리되기 때문에 데이터가 어디에 저장되있는지 걱정할 필요 없다

버퍼는 명시적 비우기와 묵시적 비우기가 있음

명시적 비우기 :  flushcommits()메소드 사용하여 서버에 데이터를 전송하고 영구 저장

묵시적 비우기 : put(), setwriteBufferSize()실행할 때 발동

 

쓰기 버퍼에 저장된 내용에 접근해야 한다면 table.put(put)메소드를 통해 버퍼에 그동안 저장한 put 인스턴스의 리스트를 반환하는 ArrayList<Put>getWriteBuffer() 메소드 사용

 

- Put 리스트

연산을 일괄처리로 한 데 묶는 고급 기능이 있다

리스트 기반의 입력을 사용할 때는 서버 측에서 입력 연산이 적용되는 순서를 제어할 수 없다.

-> 연산이 적용되는 특정 순서를 보장해야 하는 경우라면 주의 깊게 사용해야 한다.

 

- 원자적 '확인 후 입력' 연산

특정 조건의 확인에 의해 감시되는 원자적인 서버 측 객체를 생성할 수 있게 해준다

동일한 로우에서만 확인하고 수정

 

3.3.2 Get 메소드

클라이언트 PIT의 다음 단계는 저장한 데이터 반환하는 일

-> 하나의 로우를 대상으로 읽기를 수행하는 그룹과 한 번의 실행으로 여러 개의 로우를 반환하는 그룹으로 나누어 진다

 

- Result class

get() 메소드를 사용하여 데이터를 읽어들일 때는 쿼리 조건에 부합하는 모든 셀을 담고 있는 Result 클래스의 인스턴스를 반홚 받는다.

 

- Get 관련 기타 메소드

getRowOrBefore() 메소드로 로우가 없는걸 입력하였을때 그전의 row 값을 ㅇ릭을 수 있다.

 

3.2.3 Delete 메소드

 

Delete 클래스를 생성하려면 삭제하고자 하는 로우키를 입력해야 한다

deleteFamily() 메소드를 이용해 전체 컬럼패밀리 및 컬럼 삭제 기ㅏ능 (타임스탬프 지정가능)

deleteColumn() 정확히 하나의 컬럼 대상으로 동작하여 타임스탬프를 지정하지 않으면 해당 셀의 모든 버전을 삭제한다

setTimestamp 전체 컬럼패밀리를 대상으로 주어진 타임스탬프와 일치하거나 그보다 오래된 버전 삭제 가능

타임스탬프에 지정을 한 deleteColumn()에서 존재하지 않는 셀 삭제하려고 하면 아무일도 안일어남

 

- Delete 리스트

컬럼패밀리가 없는걸 지우게 되면 에러 메시지 출력

 

- 원자적 '확인 후 삭제' 연산

삭제 연산 수행되기 전에 데이터 확인을 위한 로우키, 컬럼패밀리, 퀄리파이어 및 값을 지정해야 한다

value 파라미터에 null을 사용하면 컬럼이 존재하지 않는지 여부검사

 

3.3 일괄처리 연산

 

여러개의 로우에 대해 다양한 연산

동일한 로웨 대해 Delete와 put연산을 섞어서 일괄처리 하나로 싫애하지 않도록 주의

batch()메소드를 사용할 때는 put 인스턴스가 클라이언트 측 쓰기 버퍼에 저장되지 않는다

void batch(actions, results)

성공한 모든 연산의 결과 및 실패한 연산의 원격 예외 정보에 접근할 수 있다

object[] batch(actions)

클라이언트 측 예외만 반환한다. 결과값의 일부에도 접근할 수 ㅇ벗다

 

3.4 로우락

 

어떤 로우에 대한 락을 획득한 ㅋ클라이언트 하나만이 그 로우를 변경할 수 있도록 보장

-> 그러나 자주사용하면 안되는데.. DeadLock걸릴수있음

어떤 로우가 락을 잡고 있으면 동일한 로우에 해당하는건..? 획득할 수 없다

이전에 획득한 명시적 로우 락을 사용하다가 만료 기한 내에 해제하지 못하면 서버에서 UnknownRowLockException 이라는 에러 방출

 

3.5 스캔

 

순차적이고 정렬된 저장 구조를 활용

 

3.5.1 소개

 

getScanner()메소드를 통해 사용자가 실제로 반복처리를 수행해야 하는 스캐너 인스턴스 반환

생성자에 startRow 파라미터를 제공 -> Hbase 테이블에서 탐색을 시작할 로우키 지정

스캔의 장점은 탐색을 위한 로우 키를 정확하게 지정하지 않아도 된다는 점

StopROw 파라미터와 탐색중인 로우키가 같으면 중단

addFamily() 이용하여 컬럼패밀리 제한

addColumn() 이용하여 컬럼 제한

 

3.5.2 ResultScanner 클래스

 

스캔결과는 로우 단위로 반환

스캐너 인스턴스는 가능한 빨리 해제해야 한다. -> 리소스 많이 먹음

 

3.5.3 캐싱 대 일괄처리

 

한번의 RPC에 여러 개의 로우를 전송하는 쪽이 더 바람직하다 -> '스캐너 캐싱'

 

테이블 단위의 캐싱 - 해당 테이블에 대한 모든 스캔 인스턴스에 효럭

스캔 단위의 캐싱 - 해당 스캔에 대해서만 효력

 

RPC의 개수와 클라이언트 및 서버에서 사용되는 메모리 양 사이에서 가장 효율적인 지점을 찾아야됨

 

스캐너 캐싱과 일괄처리 크기 설정을 조합하면, 선택된 키 범위의 로우들을 스캔할 때 필요한 RPC의 개수를 조절할 수 있다

 

컬럼패밀리 2개 -> 컬럼 10개, 컬럼 10개

로우 10개

 

3.6 기타기능

 

void alose() - 해당 테이블에 관한 작업 완료후 닫아야됨

byte[] getTableName() - 테이블 이름 반환

728x90
반응형

'IT 기술 > BigData' 카테고리의 다른 글

15. 클라이언트 API 관리기능 - 1  (0) 2023.02.06
14. 클라이언트 API: 고급기능  (0) 2023.02.06
12. HBase 요구사항  (1) 2023.02.03
11. HBase 소개 - 4  (0) 2023.02.03
10. HBase 소개 - 3  (1) 2023.02.03
Comments