HBase Thrift 인터페이스 사용 문제 및 주의사항 에 대한 상세 한 설명

3226 단어 HBaseThrift
HBase 는 비 자바 언어 에 Thrift 인터페이스 지원 을 제공 합 니 다.여기 서 HBase Thrift 인터페이스(HBase 버 전 0.92.1)에 대한 사용 경험 을 결합 하여 그 중에서 발생 한 문제 와 관련 된 주의사항 을 정리 합 니 다.1.바이트 의 저장 순서 인 HBase 에 서 는 row(row key 와 column family,column qualifier,time stamp)가 사전 순서에 따라 정렬 되 기 때문에 short,int,long 등 유형의 데 이 터 는 Bytes.toBytes(...)를 통 해 byte 배열 로 변환 한 후,반드시 대 단 모드(높 은 바이트 가 낮은 주소,낮은 바이트 가 높 은 주소)에 저장 해 야 합 니 다.value 에 대해 서도 마찬가지다.따라서 Thrift API(C++,Php,Python 등)방식 을 사용 할 때 row 와 value 에 대해 서 는 일괄 적 으로 pack 과 unpack 처 리 를 하 는 것 이 좋다.예 를 들 어 C++에서 int 형 변수 에 대해 다음 과 같은 방식 으로 사전 순서 로 전환 합 니 다.

string key;
  int32_t timestamp = 1352563200;
  const char* pTs =(const char*) &timestamp;
  size_t n = sizeof(int32_t);
  key.append(pTs, n);
다음 과 같은 방식 으로 사전 순 서 를 int:

const char * ts = key.c_str();
int32_t timestamp = *((int32_t*)(ts));
Php 에서 pack 과 unpack 방법 으로 전환 합 니 다.

  $key = pack("N", $num);
  $num = unpack("N", $key);
2.TScan 의 함정 HBase 를 사용 하 는 PHP Thrift 인터페이스 에서 TScan 은 startRow,stopRow,columns,filter 등 속성 을 직접 설정 할 수 있 습 니 다.기본 속성 은 모두 null 입 니 다.설정 후 비 null 로 변 경 됩 니 다.(TScan 의 구조 함수 나 TScan 의 구성원 변 수 를 직접 할당 합 니 다.)write()방법 과 Thrift Server 를 통 해 RPC 작업 을 할 때 직접 판단 하 는 근 거 는 이러한 속성 이 null 이 아니 라 Thrift 프로 토 콜 을 통 해 Thrift Server 에 전송 된다 는 것 이다.하지만 C++의 Thrift 인터페이스 에 TScan 중 하나 가 있 습 니 다.TScan__isset __isset 유형의 변 수 는 내부 구 조 는 다음 과 같다.

typedef struct _TScan__isset {
  _TScan__isset() : startRow(false), stopRow(false), timestamp(false), columns(false), caching(false), filterString(false) {}
  bool startRow;
  bool stopRow;
  bool timestamp;
  bool columns;
  bool caching;
  bool filterString;
} _TScan__isset;
TScan 의 write()방법 은 판단 을 통 해TScan__isset 의 각 bool 변 수 는 startRow,stopRow,columns,filter 등 속성 을 설정 하 였 는 지 여 부 를 표시 합 니 다.이 속성 들 을 Thrift 프로 토 콜 을 통 해 Thrift 서버 에 전송 할 지 여 부 를 결정 합 니 다.이 속성 들 은set_xxx()방법 을 설정 해 야 효력 이 발생 합 니 다!TScan 의 기본 구조 함수 에 서 는 이러한 속성 에 대응 하지 않 는isset 태그 가 true 로 설정 되 었 습 니 다!따라서 TScan 의 구조 함 수 를 통 해 startRow,stopRow,columns,filter 등 속성 을 직접 초기 화하 면 처음부터 이 표를 옮 겨 다 니 며 만 호출 될 수 있 습 니 다.set_xxx()방법 은 대응 하 는 bool 표 지 를 true 로 설정 해 야 서버 에서 startRow,stopRow,columns,filter 등 속성 을 가 져 와 스 캔 할 수 있 습 니 다.3.동시 방문 스 레 드 수 는 먼저 네트워크 전송 으로 인 한 시간 비용 을 최대한 줄 이기 위해 HBase 의 Thrift Server 는 응용 클 라 이언 트 와 같은 기계 에 배치 하 는 것 이 좋 습 니 다.Thrift 서버 가 시 작 될 때 매개 변 수 를 통 해 병렬 스 레 드 수 를 설정 할 수 있 습 니 다.그렇지 않 으 면 Thrift 서버 스 레 드 가 클 라 이언 트 의 읽 기와 쓰기 요청 에 응답 하지 않 습 니 다.구체 적 인 명령:bin/hbase-daemon.sh start thrift--threadpool-m 200-w 500(더 많은 매개 변 수 는 여기 참조:bin/hbase-daemon.sh start thrift-h).4.최대 메모리 설정 클 라 이언 트 와 Thrift Server 가 scan 작업 순 서 를 통 해 데 이 터 를 읽 고 일정한 cache 기록 항목 수 를 설정 합 니 다(TScan 의 int 32 를 통 해t caching 변수 설정),그러면 이 caching 의 기록 수 는 Thrift Server 의 상당 부분의 메모 리 를 차지 할 수 있 습 니 다.특히 다 중 클 라 이언 트 가 동시 방문 할 때 더욱 뚜렷 합 니 다.따라서 Thrift Server 가 시작 되 기 전에 최대 메모 리 를 늘 릴 수 있 습 니 다.그렇지 않 으 면 자바.lang.OutOfmory Error 이상으로 프로 세 스 가 죽 을 수 있 습 니 다.특히 Scan 시 비교적 큰 caching 기록 항목 수 를 설정 한 경우(기본 값 은 export HBASE 입 니 다.HEAPSIZE=1000 MB,conf/hbase-env.sh 에서 설정 가능).

좋은 웹페이지 즐겨찾기