본문 바로가기

카테고리 없음

HBase Scan

Scan()

Scan(byte[] startRow, Filter filter)

Scan(byte[] startRow)

Scan(byte[] startRow, byte[] stopRow)


GET, PUT과 유사하게 SCAN하기 위해 Scan 클래스를 생성해야 한다. get과 유사하게 row Key를 지정하지만 scan에서는 HTable로 부터 읽기 시작할 곳(startRow)을 지정하는 것이다.

startRow는 스캔 대상에 포함되고 stopRow는 스캔 대상에서 제외된다.

 특별히 지정한 것이 없으면 테이블의 처음부터 스캔한다.

그밖에 필터를 지정할 수 있는데 필터링할 조건이라고 보면된다.

Get과 유사하게 addFamily, addColumn 함수를 이용하여 제한된 대상을 기준으로 스캔할 수 있다.

다음 함수들을 이용하여 버전 또는 타임스탬프로 대상 기준들을 필터링 할수 도 있다.

Scan setTimeRange(long minStamp, long maxStamp) throws IOException

Scan setTimeStamp(long timestamp)

Scan setMaxVersions()

Scan setMaxVersions(int maxVersions)

 


스캔을 수행하는 Iterator를 가져오기 위해서 get, put 함수대신 getScanner() 함수를 수행해야한다.

ResultScanner getScanner(Scan scan) throws IOException

ResultScanner getScanner(byte[] family) throws IOException

ResultScanner getScanner(byte[] family, byte[] qualifier) 

  throws IOException



 Caching vs. Batching

next를 호출하면 각 row에 대한 분리된  RPC가 될 것이다. next 호출 반복해서 row를 가져와야 하지만 작은 셸을 처리하는데 퍼포먼스가 좋지 못하다. 그래서 가능한한 좀 더 많은 row을 가져오게끔 해야한다. 이를 스캔너 캐시라고 부른다. (디폴트로 비활성화 되어있음)

void setScannerCaching(int scannerCaching)

int getScannerCaching()



hbase-site.xml에 설정을 변경할 수도 있다.

<property>

  <name>hbase.client.scanner.caching</name>

  <value>10</value>

</property>


 스캔너가 아니라 scan 레벨에서 지정할 수 도 있다.

void setCaching(int caching)

int getCaching()