Azure HDInsight의 Apache Hive 및 HiveQL이란?

Apache Hive는 Apache Hadoop용 데이터 웨어하우스 시스템입니다. Hive를 사용하면 데이터의 요약, 쿼리 및 분석을 수행할 수 있습니다. Hive 쿼리는 SQL과 유사한 쿼리 언어인 HiveQL로 작성합니다.

Hive를 사용하면 크게 구조가 없는 데이터에 구조를 투영할 수 있습니다. 구조를 정의한 후에 Java 또는 MapReduce 지식 없이 해당 데이터를 쿼리할 때에 HiveQL을 사용할 수 있습니다.

HDInsight는 특정 워크로드에 맞게 조정되는 여러 클러스터 형식을 제공합니다. 다음과 같은 클러스터 형식이 Hive 쿼리에 가장 자주 사용됩니다.

클러스터 유형 설명
대화형 쿼리 LLAP(낮은 대기 시간 분석 처리) 기능을 제공하여 대화형 쿼리에 대한 응답 시간을 개선하는 Hadoop 클러스터입니다. 자세한 내용은 HDInsight의 Interactive Query로 시작 문서를 참조하세요.
Hadoop은 일괄 처리 프로세싱 워크로드에 대해 조정된 Hadoop 클러스터입니다. 자세한 내용은 HDInsight의 Apache Hadoop으로 시작 문서를 참조하세요.
Spark Apache Spark에는 Hive 작업을 위한 기본 제공 기능이 있습니다. 자세한 내용은 HDInsight에서 Apache Spark 시작 문서를 참조하세요.
HBase HiveQL은 Apache HBase에 저장된 데이터를 쿼리하는 데 사용할 수 있습니다. 자세한 내용은 HDInsight에서 Apache HBase 시작 문서를 참조하세요.

Hive 사용 방법

HDInsight에서 Hive를 사용하는 여러 가지 방법을 알아보려면 다음 표를 참조하세요.

다음을 원하는 경우 이 메서드를 사용... ...대화형 쿼리 ...배치 처리 ... 클라이언트 운영 체제
HDInsight tools for Visual Studio Code Linux, Unix, macOS X 또는 Windows
Visual Studio용 HDInsight 도구 Windows
Hive 보기 모두(브라우저 기반)
Beeline 클라이언트 Linux, Unix, macOS X 또는 Windows
REST API   Linux, Unix, macOS X 또는 Windows
Windows PowerShell   Windows

HiveQL 언어 참조

HiveQL 언어 참조는 언어 설명서에서 확인할 수 있습니다.

Hive 및 데이터 구조

Hive는 구조화되거나 반구조화된 데이터로 작업하는 방법을 이해합니다. 예를 들어 필드가 특정 문자로 구분된 텍스트 파일이 있습니다. 다음 HiveQL 문은 공백으로 구분된 데이터에 대해 테이블을 만듭니다.

CREATE EXTERNAL TABLE log4jLogs (
    t1 string,
    t2 string,
    t3 string,
    t4 string,
    t5 string,
    t6 string,
    t7 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION '/example/data/';

또한 Hive는 복잡하거나 불규칙하게 구조화된 데이터에 대한 사용자 지정을 serializer/deserializers(SerDe) 지원합니다. 자세한 내용은 HDInsight와 함께 사용자 지정 JSON SerDe를 사용하는 방법 문서를 참조하세요.

하이브에서 지원하는 파일 형식에 대한 자세한 내용은 언어 설명서(https://cwiki.apache.org/confluence/display/Hive/LanguageManual)를 참조하세요.

Hive 내부 테이블과 외부 테이블 비교

Hive로 다음과 같은 두 가지 형식의 테이블을 만들 수 있습니다.

  • 내부: 데이터가 Hive 데이터 웨어하우스에 저장됩니다. 데이터 웨어하우스는 클러스터의 기본 스토리지인 /hive/warehouse/에 있습니다.

    다음 조건 중 하나가 적용되는 경우 내부 테이블을 사용합니다.

    • 데이터가 일시적입니다.
    • Hive로 테이블 및 데이터의 수명 주기를 관리하고자 합니다.
  • 외부: 데이터가 데이터 웨어하우스 외부에 저장됩니다. 클러스터에서 액세스할 수 있는 스토리지에 데이터를 저장할 수 있습니다.

    다음 조건 중 하나가 적용되는 경우 외부 테이블을 사용합니다.

    • 데이터를 Hive 외부에서도 사용합니다. 예를 들어 데이터 파일은 파일을 잠그지 않는 다른 프로세스에 의해 업데이트됩니다.
    • 테이블을 삭제한 후에도 데이터는 기본 위치에 남아 있어야 합니다.
    • 기본이 아닌 스토리지 계정과 같은 사용자 지정 위치가 필요합니다.
    • Hive가 아닌 프로그램이 데이터 형식, 위치 등을 관리합니다.

자세한 내용은 Hive 내부 및 외부 테이블 소개 블로그 게시물을 참조하세요.

UDF(사용자 정의 함수)

Hive는 사용자 정의 함수(UDF)를 통해 확장 될 수도 있습니다. UDF를 사용하면 HiveQL에서 쉽게 모델링할 수 있는 기능 또는 논리를 구현할 수 있습니다. Hive와 함께 UDF를 사용하는 방법의 예는 다음 문서를 참조하세요.

예제 데이터

HDInsight에서 Hive는 hivesampletable이라는 내부 테이블로 미리 로드됩니다. 또한 HDInsight는 Hive와 함께 사용할 수 있는 예제 데이터 집합을 제공합니다. 이러한 데이터 집합은 /example/data/HdiSamples 디렉터리에 저장됩니다. 이러한 디렉터리는 클러스터의 기본 스토리지에 있습니다.

예제 Hive 쿼리

다음 HiveQL 문은 열을 /example/data/sample.log 파일에 저장합니다.

DROP TABLE log4jLogs;
CREATE EXTERNAL TABLE log4jLogs (
    t1 string,
    t2 string,
    t3 string,
    t4 string,
    t5 string,
    t6 string,
    t7 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION '/example/data/';
SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs
    WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log'
    GROUP BY t4;

이전 예제에서 HiveQL 문은 다음 작업을 수행합니다.

설명
DROP TABLE 이미 테이블이 있는 경우 삭제합니다.
CREATE EXTERNAL TABLE Hive에서 새 외부 테이블을 만듭니다. 외부 테이블만 테이블 정의를 Hive에 저장합니다. 데이터는 원래 위치에 원래 형식으로 남아 있습니다.
ROW FORMAT 데이터의 형식 지정 방식을 Hive에 알립니다. 이 경우, 각 로그의 필드는 공백으로 구분됩니다.
STORED AS TEXTFILE LOCATION 데이터가 저장된 위치(example/data 디렉터리)와 텍스트로 저장되었음을 Hive에 알립니다. 데이터는 디렉터리 내에서 하나의 파일 또는 여러 파일에 걸쳐 분산될 수 있습니다.
SELECT t4 열에 [ERROR] 값이 포함된 모든 행의 수를 선택합니다. 이 값을 포함하는 행이 3개 있으므로 이 문은 3 값을 반환합니다.
INPUT__FILE__NAME LIKE '%.log' Hive는 디렉터리의 모든 파일에 스키마를 적용하려고 합니다. 이 경우 디렉터리에 스키마와 일치하지 않는 파일이 포함됩니다. 결과에 가비지 데이터가 나타나는 것을 방지하기 위해 이 문은 .log로 끝나는 파일의 데이터만 반환해야 함을 Hive에게 알립니다.

참고 항목

외부 원본에서 기본 데이터를 업데이트하길 원하는 경우에는 외부 테이블을 사용해야 합니다. 예를 들어 자동화된 데이터 업로드 프로세스 또는 MapReduce 작업이 있습니다.

외부 테이블을 삭제하면 데이터가 삭제되지 않고 테이블 정의만 삭제됩니다.

외부 테이블 대신 내부 테이블을 만들려면 다음 HiveQL을 사용합니다.

CREATE TABLE IF NOT EXISTS errorLogs (
    t1 string,
    t2 string,
    t3 string,
    t4 string,
    t5 string,
    t6 string,
    t7 string)
STORED AS ORC;
INSERT OVERWRITE TABLE errorLogs
SELECT t1, t2, t3, t4, t5, t6, t7 
    FROM log4jLogs WHERE t4 = '[ERROR]';

이러한 문은 다음 작업을 수행합니다.

설명
CREATE TABLE IF NOT EXISTS 테이블이 없으면 만듭니다. EXTERNAL 키워드가 사용되지 않으므로 이 문은 내부 테이블을 만듭니다. 테이블은 Hive 데이터 웨어하우스에 저장되며 Hive에서 전적으로 관리됩니다.
STORED AS ORC 데이터를 ORC(Optimized Row Columnar) 형식으로 저장합니다. ORC는 Hive 데이터를 저장하기 위한 고도로 최적화되고 효율적인 형식입니다.
INSERT OVERWRITE ... SELECT [ERROR]가 포함된 log4jLogs 테이블에서 행을 선택하고 데이터를 errorLogs 테이블에 삽입합니다.

참고 항목

외부 테이블과 달리 내부 테이블을 삭제하면 기본 데이터도 삭제됩니다.

Hive 쿼리 성능 향상

Apache Tez

Apache Tez 는 Hive와 같이 데이터를 많이 사용하는 애플리케이션을 큰 규모에서도 훨씬 더 효율적으로 실행할 수 있는 프레임워크입니다. Tez는 기본적으로 사용됩니다. Tez의 Apache Hive 디자인 문서에는 선택 가능한 구현 및 튜닝 구성과 관련된 세부 정보가 포함되어 있습니다.

LLAP(짧은 대기 시간 분석 처리)

LLAP(Live Long and Process라고도 함)는 쿼리의 메모리 내 캐싱을 수행할 수 있는 Hive 2.0의 새로운 기능입니다.

HDInsight는 Interactive Query 클러스터 형식으로 LLAP를 제공합니다. 자세한 내용은 Interactive Query로 시작 문서를 참조하세요.

Hive 쿼리 예약

예약된 워크플로 또는 주문형 워크플로의 일부로 Hive 쿼리를 실행하는 데 사용할 수 있는 여러 서비스가 있습니다.

Azure Data Factory

Azure Data Factory를 사용하면 데이터 팩터리 파이프라인의 일부로 HDInsight를 사용할 수 있습니다. 파이프라인에서 Hive를 사용하는 방법에 대한 자세한 내용은 Azure Data Factory에서 Hive 활동을 사용하여 데이터 변환 문서를 참조하세요.

Hive 작업 및 SQL Server Integration Services

SSIS(SQL Server Integration Services)를 사용하여 Hive 작업을 실행할 수 있습니다. Azure Feature Pack for SSIS는 HDInsight에서 Hive 작업을 하는 다음 구성 요소를 제공합니다.

자세한 내용은 Azure 기능 팩 설명서를 참조하세요.

Apache Oozie

Apache Oozie는 Hadoop 작업을 관리하는 워크플로 및 코디네이션 시스템입니다. Hive에서 Oozie를 사용하는 방법에 대한 자세한 내용은 Apache Oozie를 사용하여 워크플로 정의 및 실행 문서를 참조하세요.

참고 항목

Phoenix Storage Handler for Hive는 HDInsight에서 지원되지 않습니다.

다음 단계

이제 Hive의 정의 및 HDInsight에서 Hadoop와 Hive를 사용하는 방법을 살펴보았으므로 다음 링크를 사용하여 Azure HDInsight로 작업하는 다른 방법을 알아봅니다.