반응형

append, count, delete, deleteall, 


get


로우나 테이블 내용을 가지고 온다. 테이블명, 로우 그리고 선택적으로 컬럼 목록, timestamp, timerange 와 버젼을 전달할 수 있다.


Examples:


  hbase> get 'ns1:t1', 'r1'

  hbase> get 't1', 'r1'

  hbase> get 't1', 'r1', {TIMERANGE => [ts1, ts2]}

  hbase> get 't1', 'r1', {COLUMN => 'c1'}

  hbase> get 't1', 'r1', {COLUMN => ['c1', 'c2', 'c3']}

  hbase> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1}

  hbase> get 't1', 'r1', {COLUMN => 'c1', TIMERANGE => [ts1, ts2], VERSIONS => 4}

  hbase> get 't1', 'r1', {COLUMN => 'c1', TIMESTAMP => ts1, VERSIONS => 4}

  hbase> get 't1', 'r1', {FILTER => "ValueFilter(=, 'binary:abc')"}

  hbase> get 't1', 'r1', 'c1'

  hbase> get 't1', 'r1', 'c1', 'c2'

  hbase> get 't1', 'r1', ['c1', 'c2']

  hbase> get 't1','r1', {COLUMN => 'c1', ATTRIBUTES => {'mykey'=>'myvalue'}}

  hbase> get 't1','r1', {COLUMN => 'c1', AUTHORIZATIONS => ['PRIVATE','SECRET']}


기본적으로 toStringBinary 포맷을 제공하지만 컬럼에 따라 custom 포맷팅을 지원한다.

사용자는 컬럼명을 명시할때 포매터를 지정할 수 있다. 포맷터는 다음과 같이 명시 될 수 있다.


 1. org.apache.hadoop.hbase.util.Bytes 메소드명 (e.g, toInt, toString)

 2. 커스텀클래스와 메소드명  e.g. 'c(MyFormatterClass).format'.


Example formatting cf:qualifier1 and cf:qualifier2 both as Integers:

  hbase> get 't1', 'r1' {COLUMN => ['cf:qualifier1:toInt',

    'cf:qualifier2:c(org.apache.hadoop.hbase.util.Bytes).toInt'] }


Note 컬럼에 대해서만 포맷터를 명시할 수 없다.(cf:qualifer). 컬럼 패밀리의 모든 칼럼에 포맷터를 명시할 수는 없다.


같은 명령어 컬럼 참조명에 따라서 표현하면 아래와 같다.


  hbase> t.get 'r1'

  hbase> t.get 'r1', {TIMERANGE => [ts1, ts2]}

  hbase> t.get 'r1', {COLUMN => 'c1'}

  hbase> t.get 'r1', {COLUMN => ['c1', 'c2', 'c3']}

  hbase> t.get 'r1', {COLUMN => 'c1', TIMESTAMP => ts1}

  hbase> t.get 'r1', {COLUMN => 'c1', TIMERANGE => [ts1, ts2], VERSIONS => 4}

  hbase> t.get 'r1', {COLUMN => 'c1', TIMESTAMP => ts1, VERSIONS => 4}

  hbase> t.get 'r1', {FILTER => "ValueFilter(=, 'binary:abc')"}

  hbase> t.get 'r1', 'c1'

  hbase> t.get 'r1', 'c1', 'c2'

  hbase> t.get 'r1', ['c1', 'c2']



get_counter, incr, 


put


명시된 테이블/로우/칼럼이 명시된 셀에 값을 입력한다. 추가적으로 timestamp를 입력할 수 있다.

셀 값으로 테이블 'ns1:t1'이나 't1'의 로우 'r1'의 컬럼 'c1'에 시간을 ts1으로 명시를 한다면 다음과 같다.


  hbase> put 'ns1:t1', 'r1', 'c1', 'value'

  hbase> put 't1', 'r1', 'c1', 'value'

  hbase> put 't1', 'r1', 'c1', 'value', ts1

  hbase> put 't1', 'r1', 'c1', 'value', {ATTRIBUTES=>{'mykey'=>'myvalue'}}

  hbase> put 't1', 'r1', 'c1', 'value', ts1, {ATTRIBUTES=>{'mykey'=>'myvalue'}}

  hbase> put 't1', 'r1', 'c1', 'value', ts1, {VISIBILITY=>'PRIVATE|SECRET'}


테이블 레퍼런스 t가 있고, 똑같은 명령을 수행한다면 다음과 같이 표현할 수 있다.


  hbase> t.put 'r1', 'c1', 'value', ts1, {ATTRIBUTES=>{'mykey'=>'myvalue'}}


scan 


테이블을 스캔한다. 테이블명을 전달해야 하며 선택적으로 스캔 명세 목록을 전달할 수 있다. 스캔 명세 목록은 다음중 하나 또는 그 이상을 포함할 수 잇다.

TIMERANGE, FILTER, LIMIT, STARTROW, STOPROW, TIMESTAMP, MAXLENGTH,

or COLUMNS, CACHE


컬럼을 명세하지 않으면, 모든 컬럼이 스캔될 것이다. 컬럼 패밀리의 모든 멤버를 스캔할려면 한정자 없이 컬럼 패밀리만 남긴다. 


필터는 두가지 방식으로 명시할 수 잇다.

1. 필터문자열 사용 - 더 많은 정보는 HBASE-4176 JIRA에 첨부된 Filter Language document에서 확인할 수 있다.

2. 필터의 전체 패키지명 사용


  hbase> scan 'hbase:meta'

  hbase> scan 'hbase:meta', {COLUMNS => 'info:regioninfo'}

  hbase> scan 'ns1:t1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}

  hbase> scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}

  hbase> scan 't1', {COLUMNS => 'c1', TIMERANGE => [1303668804, 1303668904]}

  hbase> scan 't1', {REVERSED => true}

  hbase> scan 't1', {FILTER => "(PrefixFilter ('row2') AND (QualifierFilter (>=, 'binary:xyz'))) AND (TimestampsFilter ( 123, 456))"}

  hbase> scan 't1', {FILTER =>  org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1, 0)}


수행 속성의 지정


  hbase> scan 't1', { COLUMNS => ['c1', 'c2'], ATTRIBUTES => {'mykey' => 'myvalue'}}

  hbase> scan 't1', { COLUMNS => ['c1', 'c2'], AUTHORIZATIONS => ['PRIVATE','SECRET']}


CACHE_BLOCKS -- 스캐너의 블럭 캐싱을 사용할 지 여부 전환을. 기본은 활성화이다.


  hbase> scan 't1', {COLUMNS => ['c1', 'c2'], CACHE_BLOCKS => false}


RAW -- 스캐너가 삭제 마커와 수집되지 않은 삭제 셀을 포함해서 모든 결과를 반환할지 명시. 이 옵션은 특정 컬럼 옵션과 같이 지정할 수 없다. 기본은 비활성화이다.


  hbase> scan 't1', {RAW => true, VERSIONS => 10}


기본적으로 'toStringBinary' 포맷을 지원하나, 칼럼별로 커스텀 포맷팅을 지원한다. 사용자는 컬럼명에 스캔 명세로서 포맷터를 정의할 수 있다.포맷터는 다음과 같이 명시할 수 있다.


 1. org.apache.hadoop.hbase.util.Bytes 메소드명 (e.g, toInt, toString)

 2. 또는 커스텀 클래스 메소드명 : e.g. 'c(MyFormatterClass).format'.


cf:qualifier1 and cf:qualifier2 integer 포맷팅 예제

  hbase> scan 't1', {COLUMNS => ['cf:qualifier1:toInt', 'cf:qualifier2:c(org.apache.hadoop.hbase.util.Bytes).toInt'] }


칼럼에만 포맷터를 명시할 수 있음에 유의하라. 모든 칼럼이나 칼럼 패밀리에는 포맷터를 명시할 수 없다.

테이블레퍼런스가 있으면 스캔에서도 바로 지정이 가능하다.


  hbase> t = get_table 't'

  hbase> t.scan


위 상황에도 모든 필터렁, 칼럼 옵션 및 위에 명시된 모든 기능을 제공한다.


truncate, truncate_preserve



반응형

'Programming > HBase' 카테고리의 다른 글

HBase - HBase 명령어(DDL)  (1) 2014.12.26
HBase - HBase 데이터모델  (0) 2014.12.26
HBase - HBase 시작하기  (1) 2014.12.24
HBase - HBase 개요  (0) 2014.12.24
반응형

alter, alter_async, alter_status, 


create


테이블을 생성한다. 테이블명과 컬럼패밀리 집합 명세들(적어도 하나이상)를 필수적으로 전달해야한다.

옵션으로 테이블 설정을 전달할 수 있다. 컬럼 명세는 간단한 문자(이름) 이나 디렉토리일 수 있다. 


Examples:


테이블을 생성한다. (네임스페이스=ns1, 테이블구분자=t1)

  hbase> create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}


테이블을 생성한다. (네임스페이스=default, 테이블구분자=t1)

  hbase> create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}

  hbase> # The above in shorthand would be the following:

  hbase> create 't1', 'f1', 'f2', 'f3'

  hbase> create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}

  hbase> create 't1', {NAME => 'f1', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '10'}}


마지막에 테이블 설정 정보를 넣을 수 있다.


Examples:


  hbase> create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40']

  hbase> create 't1', 'f1', SPLITS => ['10', '20', '30', '40']

  hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt', OWNER => 'johndoe'

  hbase> create 't1', {NAME => 'f1', VERSIONS => 5}, METADATA => { 'mykey' => 'myvalue' }

  hbase> # Optionally pre-split the table into NUMREGIONS, using

  hbase> # SPLITALGO ("HexStringSplit", "UniformSplit" or classname)

  hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}

  hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit', CONFIGURATION => {'hbase.hregion.scan.loadColumnFamiliesOnDemand' => 'true'}}


생성된 테이블의 참조를 지정할 수 있다.


  hbase> t1 = create 't1', 'f1'


t1이라고 테이블의 참조를 지정하면 호출할 수 있다.


describe, disable, disable_all, drop, drop_all, enable, enable_all, exists, get_table, is_disabled, is_enabled, 


list 


HBase의 모든 테이블을 리스팅한다. 선택적으로 Optional regular expression parameter 사용할 수 있다.


  hbase> list

  hbase> list 'abc.*'

  hbase> list 'ns:abc.*'

  hbase> list 'ns:.*'


show_filters



반응형

'Programming > HBase' 카테고리의 다른 글

HBase - HBase 명령어(DML)  (0) 2014.12.26
HBase - HBase 데이터모델  (0) 2014.12.26
HBase - HBase 시작하기  (1) 2014.12.24
HBase - HBase 개요  (0) 2014.12.24
반응형

지난 시간에는 테이블을 만들고 데이터를 막 넣어봤다. 근데 테이블을 만들때랑 데이터를 넣을때랑 기존 RDBMS랑 먼가 다르다.

다행히 공식 사이트에 datamodel이라는 문서가 있다. 공부하자.


HBase 데이터모델 용어


Namespace

유사한 테이블들의 논리적인 집합. 향후 다중처리 feature에 토대가 될 전망이다.


  • Quota Management (HBASE-8410) - Restrict the amount of resources (ie regions, tables) a namespace can consume.

  • Namespace Security Administration (HBASE-9206) - provide another level of security administration for tenants.

  • Region server groups (HBASE-6721) - A namespace/table can be pinned onto a subset of regionservers thus guaranteeing a course level of isolation.


Table

다중 로우로 구성된 집합


Row

HBase에서 한 로우는 로우 키와 하나 또는 그 이상의 칼럼과 값으로 구성된다.  로우는 저장될때 로우키를 기준으로 알파벳순으로 정렬되어 저장된다. 이러한 이유로 로우 키는 설계에서 매우 중요하다. 이러한 저장 방식은 연관된 로우끼리 가깝게 배치하려는 목적이다. 가장 일반적인 로우키의 패턴은 웹사이트 도메인이다. 만약 로우키가 도메인이라면 도메인 역순으로 저장할 수 있을 것이다. ( org.apache.www, org.apache.main). 이러한 방식으로 저장하면 테이블에서 모든 아파치 도메인은 근처에 저장되게 된다. 이러한 방식은 서브도메인의 첫글자를 기준으로 저장되는 것 보다 좋은 방식이 될 것이다.


Column 

HBase 칼럼은 column family 와 column qualifier로 구성된다. 해당 항목들은 콜론(:)으로 구분된다.


Column Family

컬럼 패밀리란 컴럼과 값의 집합을 성능상의 이유로 물리적으로 값은 장소에 배치한 것을 의미한다.  각 컬럼 패밀리는 저장된 프로퍼티의 집합을 가진다. 각 테이블로 로우는 주어진 컬럼 패밀리에 저장할 것이 없더라도 같은 칼럼 패밀리들을 가진다. 컬럼 패밀리는 테이블이 생성될때 명시되며, 내부 파일시스템에 저장되는 방식에 영향을 준다. 그러므로, 컬럼 패밀리는 스키마 설계에서 중요한 고려 사항이다.


Column  Qualifier  

컬럼 수식어란 데이터를 인덱스를 제공하기 위해 컬럼 패밀리에 추가된 것이다. 주어진 컬럼 패밀리 content의 즉 컬럼 수석어는 content:html, content:pdf 일 수 있다. 컬럼 패밀리는 테이블이 생성될때 고정되지만, 컬럼 수식어는 로우간에 가변적이고 다를 수 있다.


Cell

셀은 로우, 컬럼패밀리, 컬럼 수식어의 집합이며, 값의 버젼을 표한하기 위해서 timestamp 값을 포함한다. 셀은 값은 해석되지 않은 바이트 배열이다.


Timestamp 

Timestamp는 주어진 값의 버젼 식별자로서 각 값과 나란히 기록된다. 기본적으로 timestamp는 데이터가 기록될때 RegionServer의 시간이며, 셀에 데이터를 넣을때 명시할 수도 있다. Timestamp를 직접적으로 조작하는 것은 특별한 경우이며, 일반적인 경우에는 권장하지 않는다. 어플리케이션 레벨에서 timestamp를 인코딩하는 것은 권장하는 패턴이다.


HBase가 획득할 수 있는 최대 수의 버젼을 컬럼 패밀리별로 명시할 수 있다. 최대 수의 버젼을 초과했을때, 가장 오래된 버젼은 삭제된다. 기본적으로는 최신버젼만 유지된다.


개념적인 테이블의 구조이다.


Row KeyTime StampColumnFamily contentsColumnFamily anchorColumnFamily people
"com.cnn.www"t9 anchor:cnnsi.com = "CNN" 
"com.cnn.www"t8 anchor:my.look.ca = "CNN.com" 
"com.cnn.www"t6contents:html = "<html>..."  
"com.cnn.www"t5contents:html = "<html>..."  
"com.cnn.www"t3contents:html = "<html>..."  
"com.example.www"t5contents:html = "<html>..." people:author = "John Doe"


{ "com.cnn.www": { contents: { t6: contents:html: "<html>..." t5: contents:html: "<html>..." t3: contents:html: "<html>..." } anchor: { t9: anchor:cnnsi.com = "CNN" t8: anchor:my.look.ca = "CNN.com" } people: {} } "com.example.www": { contents: { t5: contents:html: "<html>..." } anchor: {} people: { t5: people:author: "John Doe" } } }


반응형

'Programming > HBase' 카테고리의 다른 글

HBase - HBase 명령어(DML)  (0) 2014.12.26
HBase - HBase 명령어(DDL)  (1) 2014.12.26
HBase - HBase 시작하기  (1) 2014.12.24
HBase - HBase 개요  (0) 2014.12.24
반응형

일단 공식 사이트에서 가볍게 stand alone으로 시작하자고 해서 따라해봅니다.

먼저 설치 본을 다운 받습니다. 아파치 미러 사이트로 가서 stable한 버젼을 다운 받습니다.


http://mirror.apache-kr.org/hbase/


저는 하둡 2.x 를 설치했으므로 hbase-0.98.9-hadoop2-bin.tar.gz 파일을 다운로드 합니다.


그리고 적절한 위치에 압축을 풉니다.


${HBASE_HOME}/conf/hbase-env.sh 에  JAVA_HOME 설정을 합니다. 저는 Mac입니다.


export JAVA_HOME=`/usr/libexec/java_home -v 1.8`


${HBASE_HOME}/conf/hbase-site.xml을 수정합니다.


<configuration>

  <property>

    <name>hbase.rootdir</name>

    <value>file:///Users/devsun/dev/hbase</value>

  </property>

  <property>

    <name>hbase.zookeeper.property.dataDir</name>

    <value>/Users/devsun/dev/zookeeper</value>

  </property>

</configuration>


기동합니다.


${HBASE_HOME}/bin/start-hbase.sh


접속해봅니다.


${HBASE_HOME}/bin/hbase shell


프롬프트가 뜨면 help 명령을 쳐봅니다. 도움말이 잘 뜹니다.


hbase(main):001:0> help


테이블을 만들어봅니다.


hbase(main):006:0> create 'test', 'cf'

2014-12-24 17:40:12,492 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

0 row(s) in 0.7220 seconds


=> Hbase::Table - test


테이블에 대한 정보를 봅니다.


hbase(main):007:0> list 'test'

TABLE

test

1 row(s) in 0.0160 seconds


=> ["test"]



테이블에 데이터를 넣습니다.


hbase(main):008:0> put 'test', 'row1', 'cf:a', 'value1'

0 row(s) in 0.0710 seconds


hbase(main):009:0> put 'test', 'row2', 'cf:b', 'value2'

0 row(s) in 0.0090 seconds


hbase(main):010:0> put 'test', 'row3', 'cf:c', 'value3'

0 row(s) in 0.0080 seconds


데이터를 조회합니다.


hbase(main):011:0> scan 'test'

ROW                                                 COLUMN+CELL

 row1                                               column=cf:a, timestamp=1419410447414, value=value1

 row2                                               column=cf:b, timestamp=1419410493182, value=value2

 row3                                               column=cf:c, timestamp=1419410501601, value=value3

3 row(s) in 0.0200 seconds


한 로우만 조회합니다.


hbase(main):012:0> get 'test', 'row1'

COLUMN                                              CELL

 cf:a                                               timestamp=1419410447414, value=value1

1 row(s) in 0.0110 seconds


테이블을 지웁니다.


hbase(main):015:0> disable 'test'

0 row(s) in 1.2080 seconds


hbase(main):016:0> drop 'test'

0 row(s) in 0.1560 seconds


쉘을 빠져나옵니다.


hbase(main):017:0> exit


HBase를 종료합니다.


${HBASE_HOME}/bin/start-hbase.sh

반응형

'Programming > HBase' 카테고리의 다른 글

HBase - HBase 명령어(DML)  (0) 2014.12.26
HBase - HBase 명령어(DDL)  (1) 2014.12.26
HBase - HBase 데이터모델  (0) 2014.12.26
HBase - HBase 개요  (0) 2014.12.24
반응형

빅데이터를 일고 쓰고 싶다면 HBase를 사용하라. 수백만 칼럼의 수백억의 로우를 가진 매우 큰 테이블을 저사양의 하드웨어 클러스터에 호스팅하기 위해서 기획된 프로젝트이다. 구글의 빅테이블 모델을 기반으로 하는 오픈소스, 분산, 버젼관리, 비관계형 데이터베이스이다. 빅테이블은 구글 파일 시스템에서 효력을 발휘하지만 HBase는 Hadoop과 HDFS에서 빅테이블과 같은 분산 데이터 저장환경을 제공한다.

Features

  • 선형/모듈적 확장성.
  • 엄격한 read/write 일관성.
  • 자동 및 설정에 의한 테이블 샤딩
  • 서버간의 자동 failover 제공
  • HBase 테이블의 MapReduce 작업 지원을 위한 편리한 기본 클래스 제공 
  • 클라이언트 접근을 위한 사용하기 쉬운 Java API.
  • 실시간 쿼리를 위한 Block cache and Bloom Filters.
  • Query predicate push down via server side Filters(?)
  • XML, 프로토콜 버퍼, 바이너리 데이터 인코딩 옵션 지원하는 Thrift gateway and a REST-ful Web service
  • 확장성있는 jruby-based (JIRB) shell
  • 파일 또는 Ganglia  등 익스포팅 지원


먼가 열나 좋은 포스가.. 근데 항상 프로젝트 홈에는 다 좋다고 한다.

반응형

'Programming > HBase' 카테고리의 다른 글

HBase - HBase 명령어(DML)  (0) 2014.12.26
HBase - HBase 명령어(DDL)  (1) 2014.12.26
HBase - HBase 데이터모델  (0) 2014.12.26
HBase - HBase 시작하기  (1) 2014.12.24

+ Recent posts