복붙노트

[HADOOP] 하이브 - 버킷 팅 및 파티셔닝

HADOOP

하이브 - 버킷 팅 및 파티셔닝

우리가 하이브의 열 세트에 파티션이나 버킷을 사용할지 여부를 좁힐 때 기초 무엇을해야 하는가?

우리는 우리가 가장 많이 조회 된 두 개의 열이 거대한 데이터 세트를 가지고 가정 - 나의 확실한 선택이 두 열을 기반으로 파티션을 만들 수 있습니다, 또한이에서 만든 작은 파일의 거대한 숫자로 초래하는 경우 는 이러한 열을 기반으로 데이터를 분할하는 잘못된 결정이 될 것이며, 버킷 할 수있다보다는 디렉토리의 큰 숫자가 할 수있는 더 좋은 선택이었을 것이다.

우리는 우리가 버킷 팅 또는 분할 가야한다면 우리가 결정할 수있는 사용 방법을 정의 할 수 있습니까?

해결법

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

    1.당신은 모두 사용할 수 있습니다 버킷 팅 및 분할, 배타적이지 않다.

    당신은 모두 사용할 수 있습니다 버킷 팅 및 분할, 배타적이지 않다.

    내 상당히 긴 하이브 경험에서 내 짧은 대답은 "당신은 항상 분할을 사용해야하고, 때로는 너무 버킷 할 수 있습니다"입니다.

    당신은 큰 테이블이있는 경우, 파티션은 쿼리 데이터의 양을 줄이는 데 도움이됩니다. 파티션은 일반적으로 HDFS의 디렉토리로 표시됩니다. 일반적인 사용은 대부분의 사람들 쿼리 이후 날짜, 년 / 월 / 일으로 분할하는 것입니다. 유일한 단점은 당신이 큰 기수로 열을 분할하지 말아야한다는 것입니다. 리티는 빅 데이터의 기본 개념, 그것은 열이 가질 수있는 값의 수입니다. 예 'ip_number'를 위해 큰 카디널리티 (2 ^ 32 개의 가능한 참조)를 갖는다 예를 들어 'US 상태 "(약 50) 낮은 카디널리티를 갖는다. 당신은 높은 기수와 함께 필드에 분할하는 경우, 하이브는 좋지 않다 HDFS의 디렉토리 매우 많은 수의 (네임 노드에 추가 메모리로드)를 생성합니다.

    버킷 팅 유용 할 수 있습니다,하지만 당신은 또한 테이블에 데이터를 삽입 할 때 징계해야합니다. 하이브는 삽입하고 데이터가 돼있 방법을 bucketed 있는지 확인하지 않습니다. bucketed 표는 처리에서 추가 단계를 추가 할 수 있습니다 클러스터 BY를 수행한다. 당신이 조인을 많이 할 경우 두 테이블 (같은 분야와 양동이 같은 수의에) 같은 방법으로 bucketed하는 경우, 그들은이 크게 가속화 할 수 있습니다. 당신은 버킷의 수를 결정하면 또한, 당신은 쉽게 변경할 수 없습니다.

  2. ==============================

    2.파티션 :

    파티션 :

    파티션은 / 분해하여 입력 일부 조건 예컨대 기반으로 데이터를 분할한다 : 여기 날짜, 나라를.

    TABLE 로그를 생성 (BIGINT TS, 라인 STRING) (DT STRING, 국가 STRING)에 의해 구획;

    LOAD DATA LOCAL의 INPATH '입력 / 하이브 / 분할 / FILE1' 표 로그 파티션 (DT = '2012-01-01'국가 = 'GB') INTO;

    다음과 같이 데이터를로드 한 후 창고에서 만든 파일 :

    / 사용자 / 하이브 / 창고 / 로그 / DT = 2012-01-01 / 국가 = GB / 파일 1 /

    / 사용자 / 하이브 / 창고 / 로그 / DT = 2012-01-01 / 국가 = GB / 파일 2 /

    / 사용자 / 하이브 / 창고 / 로그 / DT = 2012-01-01 / 국가 = US / 파일 3 /

    / 사용자 / 하이브 / 창고 / 로그 / DT = 2012-01-02 / 국가 = GB / file4 /

    / 사용자 / 하이브 / 창고 / 로그 / DT = 2012-01-02 / 국가 = US / file5 /

    / 사용자 / 하이브 / 창고 / 로그 / DT = 2012-01-02 / 국가 = US / file6

    SELECT TS, DT, 라인 로그에서 WHERE 국가 = 'GB';

    이 쿼리는 파일 1, 파일 2 및 file4를 스캔합니다.

    버킷 팅 :

    버킷 팅 추가 /이 분해 다른 조건에 기초하여 입력 데이터를 분할한다.

    우리가 버킷으로 우리의 테이블 (또는 파티션)를 구성 할 수 있습니다 이유는 두 가지 이유가 있습니다.

    첫 번째는보다 효율적인 쿼리를 활성화하는 것입니다. 버킷 팅은 하이브 특정 쿼리를 수행 할 때 활용할 수있는 테이블에 여분의 구조를 부과한다. 가입 효율적지도 측로서 구현 될 수있다 - 결합 열을 포함 - 특히, 동일한 열에 bucketed 두 테이블 조인.

    테이블을 버킷하는 두 번째 이유는 샘플링보다 효율적으로 만드는 것입니다. 대규모 데이터 세트로 작업 할 때, 당신이 개발하거나 정제하는 과정에있는 동안 데이터 집합의 일부분에 쿼리를 시도하기가 매우 편리합니다.

    의 테이블이 bucketed해야 하이브를 확인하는 방법 보자. 우리가 버킷 할 열을 지정 BY 절 CLUSTERED를 사용하고 버킷 수 :

    표 학생 4 버킷으로 (ID)에 의해 CLUSTERED (rollNo INT, 이름 STRING)을 생성;

    SELECT * 학생 TABLESAMPLE FROM (BUCKET 랜드 ON 1/4 OUT ());

  3. from https://stackoverflow.com/questions/34096470/hive-bucketing-and-partitioning by cc-by-sa and MIT license