복붙노트

[HADOOP] HBase REST 필터 (SingleColumnValueFilter)

HADOOP

HBase REST 필터 (SingleColumnValueFilter)

HBase REST 인터페이스 (HBase 0.90.4-cdh3u3)에서 필터를 사용하는 방법을 알 수 없습니다. 설명서는 "문자열"에 대한 스키마 정의를 제공하지만 사용 방법은 제시하지 않습니다.

그래서, 저는 이것을 할 수 있습니다 :

curl -v -H 'Content-Type: text/xml' -d '<Scanner startRow="ddo" stopRow="ddp" batch="1024"/>' 'http://hbasegw:8080/table/scanner'

다음과 함께 검색

curl -s -H "Content-Type: text/xml" http://hbasegw:8080/table/scanner/13293426893883128482b | tidy -i -q -xml

하지만 지금은 SingleColumnValueFilter를 사용하고 XML에서 어떻게 든 인코딩해야합니다. 누구든지 이것에 대한 모범이 있습니까?

감사, 마리오

해결법

  1. ==============================

    1.Scanner XML의 필터 필드는 JSON 형식의 문자열입니다. 필터의 JSON에는 여러 개의 따옴표가 있기 때문에 작은 따옴표를 피하기 위해 curl의 -d 매개 변수에 별도의 파일을 사용하는 것이 좋습니다.

    Scanner XML의 필터 필드는 JSON 형식의 문자열입니다. 필터의 JSON에는 여러 개의 따옴표가 있기 때문에 작은 따옴표를 피하기 위해 curl의 -d 매개 변수에 별도의 파일을 사용하는 것이 좋습니다.

    curl -v -H "Content-Type : text / xml"-d @ args.txt http : // hbasegw : 8080 / table / scanner

    args.txt 파일은 다음과 같습니다.

    <Scanner startRow="cm93MDE=" endRow="cm93MDg=" batch="1024">
        <filter>
        {
            "latestVersion":true, "ifMissing":true, 
            "qualifier":"Y29sMQ==", "family":"ZmFtaWx5", 
            "op":"EQUAL", "type":"SingleColumnValueFilter", 
            "comparator":{"value":"MQ==","type":"BinaryComparator"}
        }
        </filter>
    </Scanner>
    

    JSON 필터 문자열이 어떻게 보이는지 어떻게 알 수 있습니까? 다음은 HBase의 Java API에서 제공하는 표준 Filter 객체를 사용하여 문자열 화 된 필터를 내보내는 Java 코드를 사용하는 쉬운 방법입니다.

    SingleColumnValueFilter filter = new SingleColumnValueFilter(
        Bytes.toBytes("family"),
        Bytes.toBytes("col1"),
        CompareFilter.CompareOp.EQUAL,
        Bytes.toBytes("1")
    );
    System.out.println(ScannerModel.stringifyFilter(filter));
    

    JSON과 XML은 Base64로 인코딩 된 데이터가 필요합니다. 위의 curl 명령을 테이블에서 테스트했는데 정상적으로 작동했습니다.

    궁금한 점이 있으시면 스캐너 용 REST API는 개발자가 쉽게 사용할 수있는 친숙하지 않습니다.

  2. from https://stackoverflow.com/questions/9302097/hbase-rest-filter-singlecolumnvaluefilter by cc-by-sa and MIT license