본문 바로가기
SQL/NoSQL

[데이터베이스 DB] NoSQL이란? (2-2) : HBase 사용법(Shell, command)

by newstellar 2021. 9. 2.
반응형

2021.09.01 - [SQL/NoSQL] - [데이터베이스 DB] NoSQL이란? (2-1) : HBase의 개념/특징/아키텍처

 

[데이터베이스 DB] NoSQL이란? (2-1) : HBase의 개념/특징/아키텍처

2021.09.01 - [SQL/NoSQL] - NoSQL이란? (1) : 개념 및 사용 목적, RDBMS와의 차이점 지난 포스팅에서는 NoSQL의 개념과 탄생 배경, 그리고 RDBMS와의 차이점을 알아보았다. 오늘은 Apache에서 운영하는 HBase에..

newstellar.tistory.com

 

HBase의 데이터 접근 방식

 

1. HBase Shell 기초

  • HBase Shell은 HBase에서 HDFS를 사용하여 명령을 전달하기 위한 대화형 명령어 처리 인터페이스(CLI)로서, Hmaster, region server와 연동하여 API에서 사용할 수 있는 작업을 Shell에서 수행할 수 있다.

 

  • Ruby로 Java Client 호출을 wrapping하는 방식이며, 명령어 매개변수는 홑따옴표(')를 사용하는 등 Ruby syntax를 명령에 사용한다.
    $ sudo service hbase-master status  // 해당 명령어로 daemon이 제대로 수행중인지 체크
    $ hbase shell​  // hbase shell 접속
    > version
    > status
    > exit  // hbase shell 종료

 

  • Shell command
    > create 'test', 'pinfo'  // test라는 테이블에 pinfo라는 column family 생성
    
    > list 'test'​
    
    > command 'param1', 'param2' <return>

    • Shell command는
      (1) General command
      (2) Definition command (create, list, drop, alter)
      (3) Manipulation command (Put, Get, Scan 등)
      로 나뉘어진다. 
    • HBase shell은 대화식(interactive)와 배치(Batch) 모드로 수행되며, 후자의 경우 Jruby로 스크립트를 작성해서 Shell로 전달한다.
      $ hbase shell rubyscript.rb
      
      > require 'rubyscript.rb'
    • Bash shell과 다르게 single quote(' ') 사용하며, 명령 입력 후 <return>을 입력해야 한다.

    • 다중 매개변수 호출은 중괄호({ }), key, 'value', 그리고 쉼표(,)가 필요하다.

    • 테이블 생성/변경에는 Ruby Hash를 사용한다. '=>' 연산자를 hash rocket이라 하며 key - value를 매핑한다.
      {'key1' => 'value1', 'key2' => 'value2', ... }


2. HBase Shell 기초 : Definition command

Command Type 설명
Create - 테이블, column family 구성
  > Create '<table name>', '<column family>'
- 모든 테이블에는 최소 1개 이상의 column fmaily 필요
- 새로운 namespace기능을 통해 테이블 그룹화 가능
(RDB의 '데이터베이스' 또는 '스키마' 개념)
- RDBMS와 다르게 column이나 relation을 생성하거나, key 관계나 제약조건을 명시할 필요 X
List - Hbase의 모든 테이블을 나열
  > list
  > list 't1.*'  // t1 네임스페이스 내 모든 테이블 조회
  > list 'ns_test:*'
Exists - 개별로 테이블이 존재하는지 확인
  > exists 'test'
Describe - 테이블에 있는 모든 column families, properties, value를 제공
  > describe 'test'
  > describe 'ns_test:t1'
Disable - 테이블은 존재하지만 사용 불가능한 상태로 만듦
- 삭제 명령(drop) 수행 전 disable시켜 모든 Client가 접근할 수 없도록 한다.
- 테이블이 비활성화되기까지 몇 분 소요되며, 유지보수 전에 수행한다.
  > disable 'ns_test:t1'
  > is_disabled 'user:inventory'  // 비활성화 여부를 확인
    true

  > is_abled 'ns_test:t1'
    false
  > enable ‘ns_test:t1′

  > enable_all ‘t.*’
Alter - Column family와 그 옵션을 추가/수정
- 테이블의 특성을 변경
- alter_async / alter_status
Drop - 테이블을 완전히 삭제하는 명령으로, HDFS에 있는 해당 파일이 삭제된다.
- drop 이전에 disable을 수행해야 한다.
- drop_all 을 통해 Regex와 매칭되는 테이블을 모두 삭제할 수 있다.

 

  • Table 생성 (Create)
    • Namespace ns_test with t1 table
      > create_namespace 'ns_test'
      > create 'ns_test:t1', {NAME => 'cf'}​
    • Namespace default with t1 table
      > create 't1', 'cf1', 'cf2'
      > create 't1', {NAME => 'cf1'}, {NAME => 'cf2'}
      
      > create 't1', {NAME => 'cf1', VERSIONS => 5}  
      // t1 table을 생성하면서 최신의 version을 5개까지 저장하는 column family cf1을 생성한다. 
      // VERSION : table의 column family를 만들고 몇 개까지 값을 관리할지 지정
      
      > create 't1', {NAME => 'cf1', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '5'}}
      // CONFIGURATION을 통해 특정 property를 설정할 수 있다.

 

  • Table 수정 (Alter)
    • Column family 추가/수정
      > alter 'ns_test:t1', NAME => 'pimage'
      > alter 'test', NAME => 'pinfo', VERSION => 3
    • Column family 삭제
      > alter 'ns_test:t1', NAME => 'pimage', METHOD => 'delete'
      > alter 'ns_test:t1', 'delete' => 'pimage'
    • 테이블 특성 변경 (region size = 128MB)
      > alter 'test', MAX_FILESIZE => '134217728'​
    • alter_async : 비동기적으로 alter 명령을 수행하여 schema 변경에 대한 결과를 기다리지 않는다.
      > alter_async 't1', NAME => 'f1', METHOD => 'delete'
      > alter_async 't1', 'delete' => 'f1'  // 짧은 버전

       
    • alter_status : alter 명령어의 상태(schema가 변경되고 있는 table들의 이름과 region 수)를 보여준다. 
      > alter_status 'table1'

 

 

  • Table 삭제 (Drop)
    • 명령어
      > disable 'user'
      > drop 'user:inventory'
      
      > drop_all 'ns:t1.*'

 


3. HBase Shell 기초 : Manipulation command (Put, Get, Scan, Count, Delete, Truncate)

  • Put
    • 새로운 row를 입력하거나 기존 데이터를 변경하는데 사용한다. (row key가 존재하는 경우 기존 값과 타임스탬프를 수정함)

    • column family가 한 가지 version만 유지하도록 설정했다면 새 값만 유지한다. n개의 version이 유지되도록 정의한 경우에는 새 값을 포함한 n개의 값이 보존된다.

      > put 'test', '1', 'pinfo:name', 'Jean'
      > put 'test', '2', 'position:title', 'Engineer'​

 

  • Get
    • Row key에 해당하는 가장 최신 version의 row 또는 column 내용을 가져온다.

    • Get 명령어에는 가져오고 싶은 row key를 명시한다

      > get 'test', 'r1'
      > get 'test', 'r1', {TIMERANGE => [ts1, ts2]}
      > get 'test', 'r1', {COLUMN => 'c1'}
      > get 'test', 'r1', {COLUMN => ['c1', c2', c3']}
      > get 'test', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1}
      > get 'test', 'r1', {COLUMN => 'c1', TIMERANGE => [ts1, ts2], VERSIONS => 4}
      > get 'test', 'r1', 'c1:', 'c2:'
      > get 'test', 'r1', ['c1', 'c2']

    • get_counter 명령어를 통해 row와 column 수를 알 수 있다.

      > get_counter ‘t1′, ‘r1′, ‘c1′​

 

 

  • Scan
    • 정확한 row key를 모르는 경우나 row 그룹에 대한 액세스가 필요한 경우 사용한다.

    • 전체 테이블을 scan하며 start row key와 end row key로 범위를 제한할 수 있다. 단, 정지 row는 결과에 포함하지 않고 그 이전 row까지만 검색된다.

    • 특정 column과 column family, filter로 Scan의 범위를 제한할 수 있다.

      > scan 'table name' [, options]
      > get 'table name', 'rowkey' [, options]  // get은 'rowkey'를 필요로 함
      
      > scan ‘.META.’, {COLUMNS => ‘info:regioninfo’}
      > scan ‘t1′, {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => ‘xyz’}
      > scan ‘t1′, {COLUMNS => ‘c1′, TIMERANGE => [1303668804, 1303668904]}

 

  • Delete
    • 테이블의 특정 cell, column, column family를 삭제한다.

    • Timestamp 옵션을 통해 해당 버전의 column과 그 이전 버전의 column이 삭제된다.

      > delete ‘t1′, ‘r1′, ‘c1′, ts1
      > delete 'test', '1', 'position:title', 1582167310073
      // delete '<table name>', '<row key>', '<column family:column name>', <timestamp>
      
      > deleteall ‘t1′, ‘r1′, ‘c1′, ts1
      // deleteall '<table name>', '<row key>'

 

  • Truncate
    • 테이블에 있는 모든 row를 삭제하지만 테이블과 column family는 존재한다.

      > truncate 'test'
      // truncate '<table name>'

 


4. Versions

  • HBase는 각 cell 내의 값들의 version을 저장한다.
    • version의 수는 column family 설정 시 결정된다.

    • version은 long type의 Timestamp에 의해 식별되고, 현재의 Timestamp는 기본값으로 사용된다.

    • cell version의 기본 개수는 3이며, 각 row는 내림차순의 Timestamp 순으로 정렬된다.

 

 

 

2021.09.03 - [SQL/NoSQL] - [데이터베이스 DB] NoSQL이란? (2-3) : HBase 사용법 (feat. Hive & Impala)

 

[데이터베이스 DB] NoSQL이란? (2-3) : HBase 사용법 (feat. Hive & Impala)

2021.09.02 - [SQL/NoSQL] - [데이터베이스 DB] NoSQL이란? (2-2) : HBase 사용법(Shell, command) [데이터베이스 DB] NoSQL이란? (2-2) : HBase 사용법(Shell, command) HBase의 데이터 접근 방식 1. HBase Shell..

newstellar.tistory.com

 


참고문헌
- mySUNI : NoSQL 이해와 활용 (정진석 강사님)
- https://paulsmooth.tistory.com/75

- https://blog.naver.com/theswice/221402607051
반응형

댓글