[HADOOP] HBase에서 SingleColumnValueFilter가있는 사용자 정의 비교기를 어떻게 사용합니까?
HADOOPHBase에서 SingleColumnValueFilter가있는 사용자 정의 비교기를 어떻게 사용합니까?
두 개의 SingleColumnValueFilter 개체를 사용하여 HBase 테이블의 행을 필터링하여 열의 긴 값 범위 내에있는 모든 레코드를 다시 가져 오려고합니다. SingleColumnValueFilter에 대한 문서에 따르면, 사용자가 비교자를 전달하지 않으면 열 값의 사전 비교를 수행합니다. 이 API는 SingleColumnValueFilter가이를 수행하는 방법으로 WritableByteArrayComparable을 사용하는 것을 보여줍니다.
WritableByteArrayComparable을 확장하고 compare 메소드를 덮어 쓰는 클래스를 작성했습니다.
public class LongWritableComparable extends WritableByteArrayComparable {
public LongWritableComparable() {
super();
}
public LongWritableComparable(byte[] value) {
super(value);
}
public LongWritableComparable(Long value) {
super(Bytes.toBytes(value));
}
@Override
public int compareTo(byte[] otherValue) {
byte[] thisValue = this.getValue();
long thisLong = Bytes.toLong(thisValue);
long otherLong = Bytes.toLong(otherValue);
if (thisLong == otherLong) {
return 0;
}
if (thisLong < otherLong) {
return -1;
}
return 1;
}
}
필터를 설정하는 방법은 다음과 같습니다.
SingleColumnValueFilter lowerBoundAddressResourceFilter = new SingleColumnValueFilter(
graphTable.getResource().getName(),
Bytes.toBytes(HBaseProperties.getInstance().getQualifierIpAdressLongRepresentation()),
CompareFilter.CompareOp.GREATER_OR_EQUAL,
new LongWritableComparable(lowerRangeValue));
하지만 다음 예외가 표시됩니다.
2010-08-25 14:24:10,034 ERROR org.apache.hadoop.hbase.regionserver.HRegionServer:
org.apache.hadoop.hbase.UnknownScannerException: Name: -1
at org.apache.hadoop.hbase.regionserver.HRegionServer.next(HRegionServer.java:1880)
at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.hbase.ipc.HBaseRPC$Server.call(HBaseRPC.java:657)
at org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:915)
2010-08-25 14:24:10,052 INFO org.apache.hadoop.ipc.HBaseServer: IPC Server handler 0 on 60020, call next(-1, 1000) from 172.16.32.215:53206: error: org.apache.hadoop.hbase.UnknownScannerException: Name: -1
org.apache.hadoop.hbase.UnknownScannerException: Name: -1
at org.apache.hadoop.hbase.regionserver.HRegionServer.next(HRegionServer.java:1880)
at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.hbase.ipc.HBaseRPC$Server.call(HBaseRPC.java:657)
at org.apache.hadoop.hbase.ipc.HBaseServer$Handler.run(HBaseServer.java:915)
웹에서이 실행의 원인에 대한 합의가 이루어지면 resultScanner.next ()에 액세스하는 코드가 너무 오래 걸려 regionServer에 임대가 시간 초과되어 발생하지만이 예외는 throw되기 전에 발생합니다.
ResultScanner resultScanner = table.getScanner(scan);
ResultScanner를 반환하고 반복 할 수 있습니다.
누구나 가지고있는 예제 또는 SingleColumnValueFilter가 작동하는 사용자 지정 비교기를 사용하고 있거나 내가 뭘 잘못하고 있는지 알 수 있습니까?
해결법
-
==============================
1.커스텀 콤퍼레이터를 가진 jar 파일은 쿼리하는 테이블이 $ HBASE_HOME / lib 폴더에있는 region 서버에 위치해야합니다. jar를 배치 한 후 클러스터를 다시 시작하면 쿼리가 작동합니다.
커스텀 콤퍼레이터를 가진 jar 파일은 쿼리하는 테이블이 $ HBASE_HOME / lib 폴더에있는 region 서버에 위치해야합니다. jar를 배치 한 후 클러스터를 다시 시작하면 쿼리가 작동합니다.
from https://stackoverflow.com/questions/3577142/how-do-you-use-a-custom-comparator-with-singlecolumnvaluefilter-on-hbase by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 지도 축소 프로그램에서 PDF 파일을 구문 분석하는 방법은 무엇입니까? (0) | 2019.06.26 |
---|---|
[HADOOP] 왜 YARN에 mapreduce.jobtracker.address 구성이 있습니까? (0) | 2019.06.26 |
[HADOOP] MapReduce 작업이 원격 데이터에 액세스하는 것을 제한 할 수 있습니까? (0) | 2019.06.26 |
[HADOOP] Hiber와 Hiber를 통합하기 : Hbase 테이블 등록하기 (0) | 2019.06.26 |
[HADOOP] 하이브 설치 후 Hadoop (로컬 및 호스트 대상이 일치하지 않음) (0) | 2019.06.26 |