HDInsight HBase에서 Apache Phoenix 사용

완료됨

HDInsight의 HBase 클러스터는 Apache Phoenix와 함께 제공됩니다. Apache PhoenixApache HBase에서 구축되는 오픈 소스 대규모 병렬 관계형 데이터베이스 계층입니다. Apache Phoenix를 사용하면 HBase를 통해 SQL과 유사한 쿼리를 사용할 수 있습니다. JDBC 드라이버를 사용하여 사용자가 SQL 테이블을 만들고, 삭제하고, 변경할 수 있습니다. 인덱싱하고, 뷰 및 시퀀스를 만들고, 행을 개별적으로 또는 대량으로 upsert할 수도 있습니다. Phoenix는 MapReduce를 사용하여 쿼리를 컴파일하는 대신, noSQL 네이티브 컴파일을 사용하여 HBase 위에 대기 시간이 짧은 애플리케이션을 만들 수 있도록 합니다. Phoenix는 서버의 주소 공간에서 클라이언트 제공 코드를 실행하도록 지원하는 보조 프로세서를 추가하고, 데이터와 함께 있는 코드를 실행합니다. 이 접근 방법은 클라이언트/서버 데이터 전송을 최소화합니다. 자세한 내용은 Apache Phoenix 설명서를 참조하세요.

How Apache Phoenix interfaces with Apache HBase.

HDInsight HBase의 Apache Phoenix는 아래와 같이 셀프 서비스 분석을 사용하도록 설정하고 인사이트를 추출하는 데 일반적으로 사용됩니다. Phoenix는 모든 ODBC 호환 BI 도구에 연결할 수 있으며 HBase에서 임시 SQL 분석을 사용하도록 설정할 수 있습니다.

Self service with Apache HBase.

Apache HBase와 Phoenix를 결합하여 변경 가능한 데이터용 데이터 저장소로 사용할 수 있습니다. HBase의 Apache Phoenix 쿼리 엔진은 몇 가지 중요한 기능을 제공합니다.

보조 인덱스

HBase의 레코드는 기본 행 키에 사전순으로 정렬된 단일 인덱스를 사용하는 기본 행 키를 사용하여 액세스됩니다. 기본 행 이외의 방식으로 레코드에 액세스하려고 하면 비효율적으로 HBase 테이블의 모든 데이터를 검색하게 됩니다. Apache Phoenix를 사용하면 열 및 식에 대한 보조 인덱스를 만들어 이러한 새 인덱스에 따라 지점 조회 또는 범위 검색을 허용하는 대체 행 키를 만들 수 있습니다. 자세한 내용은 Apache Phoenix 보조 인덱스 설명서를 참조하세요.

아래와 같이 HBase에서 보조 인덱스를 만드는 데는 CREATE INDEX 명령이 사용됩니다.

CREATE INDEX ix_purchasetype on SALTEDWEBLOGS (purchasetype, transactiondate) INCLUDE (bookname, quantity); 

보기

HBase에서 물리적 테이블 수를 제한하고 지역 수를 제한하는 것은 권장되는 전략입니다. Phoenix의 뷰는 HBase에서 동일한 기본 물리적 테이블을 공유하는 여러 가상 테이블을 만들 수 있도록 허용하여 이러한 권장 사항을 지원합니다. 자세한 내용은 Apache Phoenix 뷰 설명서를 참조하세요.

HBase에는 아래 테이블 정의가 제공되어 있습니다.

CREATE  TABLE product_metrics (
    metric_type CHAR(1),
    created_by VARCHAR,
    created_date DATE,
    metric_id INTEGER
    CONSTRAINT pk PRIMARY KEY (metric_type, created_by, created_date, metric_id));

다음 뷰를 정의할 수 있습니다.

CREATE VIEW mobile_product_metrics (carrier VARCHAR, dropped_calls BIGINT) AS SELECT * FROM product_metric WHERE metric_type = 'm';

트랜잭션

HBase는 행 수준 트랜잭션에서만 작동하지만, Apache Phoenix는 Apache Tephra와 통합하여 전체 ACID 지원을 통해 테이블 간 트랜잭션 및 행 간 트랜잭션을 지원합니다.

자세한 내용은 Apache Phoenix 트랜잭션 설명서를 참조하세요.

다음 예에서는 my_table이라는 테이블을 생성된 다음, 트랜잭션을 사용하도록 테이블을 변경합니다.

CREATE TABLE my_table (k BIGINT PRIMARY KEY, v VARCHAR) TRANSACTIONAL=true;

ALTER TABLE my_other_table SET TRANSACTIONAL=true;

솔트된 테이블

행 키가 일정하게 증가하는 경우 순차 쓰기 중에 HBase에서 지역 서버 핫스팟이 발생할 수 있습니다. Apache Phoenix는 특정 테이블에 대한 솔팅 바이트로 행 키를 솔트하는 방법을 제공하여 핫스팟을 완화할 수 있습니다. 자세한 내용은 Apache Phoenix 솔트된 테이블 설명서를 참조하세요.

CREATE TABLE Saltedweblogs (
    transactionid varchar(500) Primary Key,
    transactiondate Date NULL,
    customerid varchar(50) NULL,
    bookid varchar(50) NULL,
    purchasetype varchar(50) NULL,
    orderid varchar(50) NULL,
    bookname varchar(50) NULL,
    categoryname varchar(50) NULL,
    invoicenumber varchar(50) NULL,
    invoicestatus varchar(50) NULL,
    city varchar(50) NULL,
    state varchar(50) NULL,
    paymentamount DOUBLE NULL,
    quantity INTEGER NULL,
    shippingamount DOUBLE NULL) SALT_BUCKETS=4;

검색 건너뛰기

지정된 행 세트의 경우 Apache Phoenix는 성능이 향상되도록 범위 검색을 통해 행 내 검색에 검색 건너뛰기를 사용합니다. 검색 건너뛰기에서는 SEEK_NEXT_USING_HINT HBase 필터를 활용합니다. 각 열에서 검색되는 키 세트/키 범위에 대한 정보를 저장합니다. 그런 다음, 키(필터 평가 중 전달됨)를 사용하여 조합이나 범위 중 하나에 포함되는지를 파악합니다. 포함되지 않으면 다음으로 가장 높은 키를 파악하여 이동합니다. 자세한 내용은 Apache Phoenix 검색 건너뛰기 설명서를 참조하세요.

Apache Phoenix의 성능 최적화는 선택적 요청 기능이며, 대체로 HBase 성능 최적화에 따라 달라집니다. 성능 최적화는 복잡한 토픽이며 이 과정의 범위를 벗어납니다. 하지만 관심이 있는 경우 Apache Phoenix 성능 모범 사례의 설명서를 참조할 수 있습니다.