2012-02-03 4 views
8

HBase에 대해 거의 알지 못합니다. 기본적인 질문은 죄송합니다.HBase의 그룹

10 억 개의 행과 1 개의 datetime 및 하나의 문자열 열이있는 테이블이 있다고 가정 해보십시오.

  1. HBase는이 테이블을 쿼리하고 키 (심지어 복합 키)를 기준으로 결과를 그룹화 할 수 있습니까?
  2. 그렇다면지도/축소 작업을 실행해야합니까?
  3. 어떻게 쿼리를 제공합니까?
  4. HBase는 일반적으로 테이블에서 실시간 쿼리를 수행 할 수 있습니까?

답변

12

HBase의 데이터 집계는 "실시간 분석"필요와 교차합니다. 이 유형의 기능을 위해 HBase가 구축되지는 않았지만 많은 기능이 필요합니다. 그래서 그렇게 할 수있는 방법이 개발 될 것입니다.
1) : Hive에 HBase 테이블을 외부 테이블로 등록하고 집계합니다. 효율적이지 않은 HBase API를 통해 데이터에 액세스 할 수 있습니다. Configuring Hive with Hbase 이것이 어떻게 수행되는지에 대한 토론입니다. HBase 데이터를 그룹화하는 가장 강력한 방법입니다. 그것은 MR 업무가 아니라 HBase가 아니라 HHive가 운영하는 것을 의미합니다.
2) HDFS의 HFiles에있는 HBase 데이터로 작업하는 자기 자신의 MR 작업을 작성할 수 있습니다. 가장 효율적인 방법 일 것이지만 단순하지는 않으며 처리 한 데이터는 다소 오래되었습니다. 데이터가 HBase API를 통해 전송되지 않으므로 가장 효율적입니다. 대신 HDFS에서 순차적으로 액세스합니다.
3) HBase의 다음 버전에는 특정 영역 내부에서 집계가 가능한 보조 프로세서가 포함됩니다. RDBMS 단어에 저장 프로 시저의 일종이라고 가정 할 수 있습니다.
4) 메모리에서 한 노드에서 병렬화 될 영역 간 MR 작업은 향후 HBase 릴리즈에서도 계획됩니다. 그것은 좀 더 진보 된 분석 처리 후 코 프로세서를 가능하게 할 것입니다.

+0

답변 해 주셔서 감사합니다. 옵션 2를 사용하면지도/Redcude를 시작하고 shufffle과 sort를 시작한 후 M/R을 실행하는 것과 관련된 모든 비용이 발생합니다. 그게 실시간처럼 어떻게 될 수 있니? – iCode

+0

그리고 내가 오늘이 일을해야한다면, 그 대답은 아직 실용적인 방법이 없다는 것인가? 1은 천천히, 3과 4는 미래, 2는 불확실한가? – iCode

+0

예, 답은 실시간으로 처리 할 수있는 방법이 없다는 의미입니다. 다음 릴리스 (코 프로세서 릴리스라고 함)를 사용할 수있게되면 지역 수준에서 실시간으로 시간 집계가 수행됩니다. –

5

FAST RANDOM READS = 준비된 데이터가 HBase에 있습니다! 그것이 무엇인지에 대한 사용 HBase를 ...

1 장소는 많은 양의 데이터를 저장합니다.
2. 슈퍼 빠른 읽기 작업을 수행 할 수있는 장소.
3. SQL이 당신을 잘 할 수없는 곳 (자바 사용).

집계 된 결과를 반환하기 전에 HBase에서 데이터를 읽고 Java 데이터 구조에서 모든 종류의 집계를 수행 할 수 있지만 계산을 mapreduce에 맡기는 것이 가장 좋습니다. 귀하의 질문에서, 계산을위한 소스 데이터를 HBase에 넣고 싶은 것처럼 보입니다. 이 경우, 취할 경로에는지도 출력 작업의 소스 데이터로 HBase가 있습니다. 계산을 수행하고 집계 된 데이터를 반환합니다. 그러나 다시, Hbase에서 mapreduce job을 읽으려면 왜 읽어야할까요? HDFS/Hive 테이블에있는 데이터를 그대로두고 mapreduce 작업을 수행하십시오. THK "미리 준비된"Hbase 테이블에 데이터를로드하여 매우 빠른 임의 읽기를 수행 할 수 있습니다.

1

HBase에 사전 집계 된 데이터가 있으면 Crux http://github.com/sonalgoyal/crux을 사용하여 HBase 데이터를 추가로 드릴링하고 슬라이스하고 다이스 할 수 있습니다. Crux는 고급 필터와 그룹화를 통해 복합 키와 간단한 키를 지원합니다.