[HADOOP] HBase에서 rowkey-search와 일치하는 COUNT 개의 행이 있습니까?
HADOOPHBase에서 rowkey-search와 일치하는 COUNT 개의 행이 있습니까?
Rowkey에 두 부분 (NUM1 ~ NUM2)이 있다고 가정 해 봅시다.
Rowkey의 첫 부분으로 카운트 그룹을 만들고 싶습니다. HBase에서이를 수행 할 수있는 방법이 있습니까?
나는 항상 M / R 작업으로 모든 행, 그룹, 개수를 읽을 수 있지만 HBase에서 수행 할 수있는 방법이 있는지 궁금합니다.
해결법
-
==============================
1.당신은 접두사 필터를 사용할 수 있습니다 .... 아래와 같은 것.
당신은 접두사 필터를 사용할 수 있습니다 .... 아래와 같은 것.
Java 클라이언트에서도 동일하게 사용할 수 있습니다
Hbase 쉘을 사용한 예제 :
scan 'yourtable', {FILTER => "PrefixFilter('12345|abc|50|2016-05-05')"} scan 'yourtable', {STARTROW=>'12345' FILTER => "PrefixFilter('2016-05-05 08:10:10')"}
귀하의 요구 사항에 따라 ...
참고 : java hbase scan api는 java에서 수행하려는 경우 동일한 방법을 사용합니다.
이 필터는 행 키에 작용하지만 퍼지 방식으로 작동합니다. 반환해야 할 행 키 목록과 행 키에서 각 바이트의 중요성을 나타내는 동반되는 byte [] 배열이 필요합니다. 생성자는 다음과 같습니다.
FuzzyRowFilter(List<Pair<byte[], byte[]>> fuzzyKeysData)
fuzzyKeysData는 다음 두 값 중 하나를 사용하여 언급 된 행 키 바이트의 중요성을 지정합니다.
* 예 : 부분 행 키 일치 * 가능한 예는 부분 키를 일치시키는 것이지만 왼쪽에서 오른쪽으로가 아니라 복합 키 내부의 어딘가에 있습니다. 길이가 4 인 고정 길이 부분을 가진 _의 행 키 형식이 2이고 4이고 길이가 2 바이트라고 가정합니다. 이제 응용 프로그램은 매년 1 월에 특정 작업 (99로 인코딩 됨)을 수행 한 모든 사용자를 요청합니다. 그런 다음 행 키와 퍼지 데이터의 쌍은 다음과 같습니다.
행 키 "???? 99 ???? _ 01", "?" 무시되기 때문에 임의의 문자입니다. 퍼지 데이터 = "\ x01 \ x01 \ x01 \ x01 \ x00 \ x00 \ x00 \ x00 \ x01 \ x01 \ x01 \ x01 \ x00 \ x00 \ x00" 즉, 퍼지 데이터 배열은 "???? 99 ???? _ 01"과 일치하는 모든 행 키를 찾도록 필터에 지시합니다. 여기서 "?" 모든 문자를 받아들입니다.
이 필터의 장점은 일치하는 행의 끝에 올 때 다음 일치하는 행 키를 계산할 수 있다는 것입니다. getNextCellHint () 메소드를 구현하여 서버가 일치하는 다음 행 범위로 빨리 감기 할 수 있도록합니다. 이는 특히 건너 뛴 범위가 매우 큰 경우 스캔 속도를 높입니다. 예 4-12는 필터를 사용하여 테스트 데이터 세트에서 특정 행을 가져옵니다.
열 접두사 별 필터링 예
List<Pair<byte[], byte[]>> keys = new ArrayList<Pair<byte[], byte[]>>(); keys.add(new Pair<byte[], byte[]>( Bytes.toBytes("row-?5"), new byte[] { 0, 0, 0, 0, 1, 0 })); Filter filter = new FuzzyRowFilter(keys); Scan scan = new Scan() .addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("col-5")) .setFilter(filter); ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) { System.out.println(result); } scanner.close();
예제 코드는 또한 출력을 짧게 유지하기 위해 필터링 열을 스캔에 추가합니다.
테이블에 행 추가 중 ... 스캔 결과 :
keyvalues={row-05/colfam1:col-01/1/Put/vlen=9/seqid=0, row-05/colfam1:col-02/2/Put/vlen=9/seqid=0, ... row-05/colfam1:col-09/9/Put/vlen=9/seqid=0, row-05/colfam1:col-10/10/Put/vlen=9/seqid=0} keyvalues={row-15/colfam1:col-01/1/Put/vlen=9/seqid=0, row-15/colfam1:col-02/2/Put/vlen=9/seqid=0, ... row-15/colfam1:col-09/9/Put/vlen=9/seqid=0, row-15/colfam1:col-10/10/Put/vlen=9/seqid=0}
테스트 코드 배선은 row-01에 row-20이라는 20 개의 행을 테이블에 추가합니다. 패턴 row-? 5와 일치하는 모든 행, 즉 숫자 5로 끝나는 모든 행을 검색하려고합니다. 위의 출력은 올바른 결과를 확인합니다.
-
==============================
2.hbase 셸에서 RegexStringComparator를 사용할 수 있습니다
hbase 셸에서 RegexStringComparator를 사용할 수 있습니다
hbase(main):003:0> import org.apache.hadoop.hbase.filter.RegexStringComparator hbase(main):006:0> scan 'test', {FILTER => org.apache.hadoop.hbase.filter.RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'),RegexStringComparator.new("NUM1*"))}
from https://stackoverflow.com/questions/41862640/is-there-a-way-in-hbase-to-count-rows-matching-rowkey-search by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 스파크는 YARN이 아닌 로컬에서 실행됩니다. (0) | 2019.09.09 |
---|---|
[HADOOP] 하둡 설정에서 NoClassDefFoundError (0) | 2019.09.09 |
[HADOOP] Hadoop MapReduce 스크립트에서 외부 라이브러리 가져 오기 (0) | 2019.09.09 |
[HADOOP] 하둡 의도 된 메모리 사용량 (0) | 2019.09.09 |
[HADOOP] Hive2 & JDBC-필수 필드 'serverProtocolVersion'이 설정되지 않았습니다. (0) | 2019.09.09 |