Hive 란 무엇입니까? Archi강의 및 모드

⚡ 스마트 요약

Hive는 Hadoop 생태계의 SQL 계층으로, HiveQL 문을 HDFS에 이미 저장된 구조화된 데이터를 읽는 분산 작업으로 변환합니다. 따라서 분석가는 MapReduce 코드를 직접 작성하지 않고도 페타바이트 규모의 테이블을 쿼리할 수 있습니다.

  • 🐝 무엇이다 : HDFS에 저장된 파일에 테이블, 행, 열을 추가하는 ETL 및 데이터 웨어하우징 도구입니다.
  • 🗂️ 메타스토어: 스키마 정보는 관계형 메타스토어에 저장되며, 한 사용자의 경우 Derby가, 다른 사용자의 경우 Derby가 지원합니다. MySQL 공유 액세스를 위해.
  • 🆚 RDBMS에 대해: Hive는 읽기 시 스키마 유효성 검사를 수행하고, 수평 확장이 가능하며, 데이터베이스에서 처리하는 행 수준 업데이트보다 대규모 스캔을 선호합니다.
  • 🏗️ XNUMX 개의 층 : 클라이언트, 서비스 및 스토리지가 아키텍처를 구성하며, 드라이버는 컴파일러, 메타스토어 및 실행 엔진을 조율합니다.
  • 🔀 두 가지 모드 : 로컬 모드는 단일 데이터 노드와 작은 파일에 적합한 반면, MapReduce 모드는 실행을 다중 노드 클러스터에 분산시킵니다.
  • 🔌 하이브서버2: Thrift 기반 HS2 인터페이스는 원격 세션에 대한 다중 클라이언트 동시 접속 및 인증 기능을 추가합니다.

하이브 아키텍처 및 모드

Hive 란 무엇입니까?

Hive는 Hadoop 분산 파일 시스템(HDFS)을 기반으로 개발된 ETL 및 데이터 웨어하우징 도구입니다. Hive를 사용하면 다음과 같은 작업을 쉽게 수행할 수 있습니다.

  • 데이터 캡슐화
  • 임시 쿼리
  • 대규모 데이터 세트 분석

Hive의 중요한 특징

아래 내용은 Hive와 일반 MapReduce 프로그램의 차이점을 설명합니다.

  • Hive에서는 테이블과 데이터베이스가 먼저 생성된 다음 데이터가 이러한 테이블에 로드됩니다.
  • Hive는 테이블에 저장된 구조화된 데이터만을 관리하고 쿼리하도록 설계된 데이터 웨어하우스입니다.
  • MapReduce는 구조화된 데이터를 다룰 때 UDF(사용자 정의 함수)와 같은 최적화 및 사용 편의성 기능을 제공하지 않지만, Hive 프레임워크는 이러한 기능을 제공합니다. 쿼리 최적화는 성능 측면에서 효율적인 쿼리 실행 방식을 의미합니다.
  • Hive의 SQL 기반 언어는 사용자가 MapReduce 프로그래밍의 복잡성에서 벗어나도록 해줍니다. 테이블, 행, 열, 스키마와 같은 관계형 데이터베이스의 친숙한 개념들을 재사용하여 학습을 용이하게 합니다.
  • Hadoop의 프로그래밍은 플랫 파일 기반으로 작동합니다. 따라서 Hive는 디렉터리 구조를 사용할 수 있습니다. "분할" 특정 쿼리의 성능을 향상시키기 위한 데이터입니다.
  • Hive의 중요한 구성 요소 중 하나는 스키마 정보를 저장하는 데 사용되는 메타스토어입니다. 이 메타스토어는 일반적으로 관계형 데이터베이스에 있습니다. 우리는 다음과 같은 메서드를 사용하여 Hive와 상호 작용할 수 있습니다.
    • 웹 GUI
    • Java 데이터베이스 연결(JDBC) 인터페이스
  • 대부분의 상호 작용은 명령줄 인터페이스(CLI)를 통해 이루어집니다. Hive는 Hive 쿼리 언어(HQL)를 사용하여 Hive 쿼리를 작성할 수 있는 CLI를 제공합니다.
  • 일반적으로 HQL 구문은 다음과 유사합니다. SQL 대부분의 데이터 분석가들이 익숙한 구문입니다. 아래 샘플 쿼리는 언급된 테이블 이름에 있는 모든 레코드를 표시합니다.
    • 샘플 쿼리 : 다음에서 *를 선택하세요.
  • Hive는 다음 네 가지 파일 형식을 지원합니다. TEXTFILE, SEQUENCEFILE, ORC 및 RCFILE (열 형식 파일 기록).
  • 단일 사용자 메타데이터 저장을 위해 Hive는 Derby 데이터베이스를 사용하고, 다중 사용자 또는 공유 메타데이터의 경우 Hive는 다른 데이터베이스를 사용합니다. MySQL.

설정을 위해 MySQL 데이터베이스 및 메타데이터 정보 저장에 대한 자세한 내용은 튜토리얼을 참조하세요. Hive 메타스토어를 구성하는 방법 MySQL이는 다음에 이어집니다. Hive 설치 가이드.

Hive에 대한 몇 가지 핵심 사항은 다음과 같습니다.

  • HQL과 SQL의 가장 큰 차이점은 Hive 쿼리가 기존 데이터베이스가 아닌 Hadoop 인프라에서 실행된다는 점입니다.
  • Hive 쿼리 실행은 자동으로 생성되는 일련의 작업입니다. MapReduce 작업.
  • Hive는 클라이언트가 쿼리를 실행할 때 데이터를 쉽게 검색할 수 있도록 파티션 및 버킷 개념을 지원합니다.
  • Hive는 사용자 정의를 지원합니다. UDF(사용자 정의 함수) 데이터 정제, 필터링 및 유사한 작업에 사용됩니다. 프로그래머의 요구 사항에 따라 Hive UDF를 정의할 수 있습니다.

하이브와 관계형 데이터베이스

Hive는 관계형 데이터베이스가 수행할 수 없는 기능을 제공합니다. 데이터 규모가 페타바이트에 달할 경우, 결과를 초 단위로 반환하는 것이 중요한데, Hive는 이를 효율적으로 처리합니다. 주요 차이점은 다음과 같습니다.

관계형 데이터베이스는 "읽기 시 스키마 및 쓰기 시 스키마"먼저 테이블을 생성한 다음 해당 테이블에 데이터를 삽입합니다. 관계형 데이터베이스 테이블에서는 삽입, 업데이트 및 수정과 같은 기능을 수행할 수 있습니다.

하이브는 "스키마를 읽기 전용으로 설정"초기 릴리스에서는 업데이트 및 수정과 같은 기능이 작동하지 않았습니다. 일반적인 클러스터에서 Hive 쿼리가 여러 DataNode에 걸쳐 실행되기 때문에 여러 노드에 걸쳐 데이터를 업데이트하고 수정하는 것이 불가능했기 때문입니다(Hive 버전 0.13 미만).

Hive는 또한 다음을 지원합니다. "많이 읽고, 한 번만 쓰라" 패턴 덕분에 최근 버전에서는 삽입 후 테이블을 업데이트할 수 있습니다.

알림: Hive의 최신 버전에는 업데이트된 기능이 포함되어 있습니다. Hive 0.14에서는 UPDATE 및 DELETE 기능이 새로 도입되었으며, 이후 릴리스에서는 완전한 ACID 트랜잭션 지원이 추가되었습니다.

아래 표는 비교 내용을 간략하게 보여줍니다.

아래 관계형 데이터베이스 아파치 하이브
스키마 검증 쓰기에 읽음
일반적인 데이터 용량 기가바이트에서 테라바이트로 테라바이트에서 페타바이트까지
작업량 행 수준 OLTP 읽기 및 쓰기 전체 스캔 배치 분석
쿼리 언어 SQL HQL은 SQL에서 영감을 받은 방언입니다.
실행 데이터베이스 엔진 분산 클러스터 작업

하이브 Archi강의

아래 그림은 다음을 설명합니다. 아파치 Hive 아키텍처에 대한 자세한 설명.

클라이언트, 서비스, 스토리지 및 컴퓨팅을 보여주는 Apache Hive 아키텍처 다이어그램

Hive는 주로 3개의 핵심 부분으로 구성됩니다.

  1. Hive 클라이언트
  2. 하이브 서비스
  3. Hive 스토리지 및 컴퓨팅

하이브 클라이언트

Hive는 다양한 유형의 애플리케이션과의 통신을 위해 여러 드라이버를 제공합니다. Thrift 기반 애플리케이션의 경우, 통신을 위해 Thrift 클라이언트를 제공합니다.

럭셔리 Java 관련 애플리케이션의 경우 JDBC 드라이버를 제공하고, 다른 유형의 애플리케이션의 경우 ODBC 드라이버를 제공합니다. 이러한 클라이언트와 드라이버는 Hive 서비스 내의 Hive 서버와 통신합니다.

하이브 서비스

클라이언트와 Hive 간의 상호 작용은 Hive 서비스를 통해 이루어집니다. 클라이언트가 Hive에서 쿼리 관련 작업을 수행하려면 Hive 서비스를 통해 통신해야 합니다.

CLI는 DDL 작업에 대한 Hive 서비스 역할을 합니다. 모든 드라이버는 위의 아키텍처 다이어그램에 표시된 것처럼 Hive 서버 및 Hive 서비스의 메인 드라이버와 통신합니다.

Hive 서비스의 드라이버는 메인 드라이버로서, JDBC, ODBC 및 기타 클라이언트별 애플리케이션과 통신한 후 해당 요청을 메타스토어와 파일 시스템으로 전달하여 추가 처리를 수행합니다.

하이브 스토리지 및 컴퓨팅

메타스토어, 파일 시스템, 작업 클라이언트와 같은 Hive 서비스는 Hive 스토리지와 통신하며 다음과 같은 작업을 수행합니다.

  • Hive에서 생성된 테이블에 대한 메타데이터 정보는 Hive에 저장됩니다. 메타스토어 데이터베이스.
  • 쿼리 결과와 테이블에 로드된 데이터는 하둡 클러스터에 저장됩니다. HDFS.

작업 실행 흐름

아래 그림 trac사용자 인터페이스에서 데이터노드로, 그리고 다시 사용자 인터페이스로 하나의 쿼리를 전송합니다.

Hive 작업 실행 흐름도 trac사용자 인터페이스에서 DataNodes로 쿼리 전송

위 다이어그램을 통해 하둡 기반 하이브에서의 작업 실행 흐름을 이해할 수 있습니다. 하이브에서의 데이터 흐름은 다음과 같은 패턴을 따릅니다.

  1. 사용자 인터페이스(UI)에서 쿼리 실행
  2. 드라이버는 컴파일러와 상호 작용하여 실행 계획을 가져옵니다. (여기서 실행 계획은 쿼리 실행 프로세스 및 관련 메타데이터 정보 수집을 의미합니다.)
  3. 컴파일러는 실행될 작업에 대한 계획을 생성합니다. 컴파일러는 메타데이터 요청을 받기 위해 메타스토어와 통신합니다.
  4. 메타스토어는 메타데이터 정보를 컴파일러로 다시 전송합니다.
  5. 컴파일러는 쿼리를 실행하기 위한 제안된 계획을 드라이버와 통신합니다.
  6. 드라이버는 실행 계획을 실행 엔진으로 보냅니다.
  7. 실행 엔진(EE)은 Hive와 Hadoop 간의 연결 고리 역할을 하여 DFS 작업을 포함한 쿼리를 처리합니다.
    • EE는 먼저 NameNode에 연결한 다음 DataNode에 연결하여 테이블에 저장된 값을 가져옵니다.
    • EE는 DataNode에서 원하는 레코드를 가져옵니다. 실제 테이블 데이터는 DataNode에만 저장되며, NameNode에서는 쿼리에 필요한 메타데이터만 가져옵니다.
    • 이 기능은 언급된 쿼리와 관련된 데이터 노드에서 실제 데이터를 수집합니다.
    • EE는 메타스토어와 양방향으로 통신하여 DDL(데이터 정의 언어) 작업을 수행합니다. 생성, 삭제 및 수정 테이블과 데이터베이스에 관한 것입니다. 메타스토어에는 데이터베이스, 테이블 및 열 이름만 저장됩니다.
    • EE는 NameNode, DataNode 및 job과 같은 Hadoop 데몬과 통신합니다. tracker는 Hadoop 파일 시스템 위에서 쿼리를 실행합니다.
  1. 드라이버로부터 결과를 가져오는 중
  2. 실행 엔진으로 결과를 전송합니다. 데이터 노드에서 실행 엔진(EE)으로 결과를 가져오면, EE는 결과를 드라이버와 UI(프런트엔드)로 다시 전송합니다.

Hive는 실행 엔진을 통해 Hadoop 파일 시스템 및 데몬과 지속적으로 통신합니다. 다이어그램의 점선 화살표는 이러한 통신을 나타냅니다.

다양한 Hive 모드

Hive는 Hadoop의 데이터 노드 크기에 따라 두 가지 모드로 작동할 수 있습니다. 이러한 모드는 다음과 같습니다.

  • 로컬 모드
  • MapReduce 모드

로컬 모드는 언제 사용해야 할까요?

  • 하둡이 단일 데이터 노드를 사용하는 유사 분산 모드로 설치된 경우, 해당 모드에서 Hive를 사용합니다.
  • 데이터 크기가 로컬 컴퓨터 한 대에 저장할 수 있을 정도로 작다면 이 모드를 사용할 수 있습니다.
  • 로컬 머신에 있는 더 작은 데이터 세트의 처리 속도는 매우 빠릅니다.

MapReduce 모드는 언제 사용해야 할까요?

  • 하둡에 여러 데이터 노드가 있고 데이터가 여러 노드에 분산되어 있는 경우, 이 모드에서는 Hive를 사용합니다.
  • 이 기능은 대량의 데이터를 처리하며 쿼리는 병렬로 실행됩니다.
  • 이 모드를 통해 더 나은 성능으로 대규모 데이터 세트를 처리할 수 있습니다.

Hive에서는 Hive가 작동할 모드를 지정하는 속성을 설정할 수 있습니다. 기본적으로 MapReduce 모드로 작동하며, 로컬 모드를 사용하려면 다음 설정을 사용하면 됩니다.

SET mapred.job.tracker=local;

Hive는 0.7 버전부터 MapReduce 작업을 자동으로 로컬 모드로 실행하는 모드를 지원합니다. Hive 4.x에서는 기본 엔진이 Apache Tez이므로 이 속성은 기존 MapReduce 방식에 적용됩니다.

Hive Server2(HS2)란 무엇입니까?

HiveServer2(HS2)는 다음과 같은 기능을 수행하는 서버 인터페이스입니다.

  • 원격 클라이언트가 Hive에 대해 쿼리를 실행할 수 있도록 합니다.
  • 해당 쿼리들의 결과를 검색합니다.

최신 버전에는 Thrift RPC 기반의 다음과 같은 고급 기능이 추가되었습니다.

  • 다중 클라이언트 동시성
  • 인증

HS2는 Beeline과 모든 JDBC 또는 ODBC 세션 뒤에 위치하며, 이것이 바로 단일 사용자용 Hive CLI를 대체한 이유입니다. HiveQL 연산자 및 내장 함수 참고 자료를 활용하는 것이 자연스러운 다음 단계입니다.

자주 묻는 질문

Hive는 분산 작업을 통해 대규모 테이블을 스캔하는 배치 쿼리 계층입니다. HBase는 단일 행에 대한 밀리초 단위의 임의 읽기 및 쓰기를 위해 설계된 NoSQL 저장소입니다. 이 둘은 서로 반대되는 액세스 패턴을 해결하며 종종 나란히 실행됩니다.

Hive는 MapReduce, Apache Tez 또는 Apache에서 실행됩니다. SparkMapReduce는 더 이상 사용되지 않으며, Hive 4.x는 기본적으로 Tez를 사용합니다. Tez는 단계 간에 중간 결과를 디스크에 기록하는 대신 메모리에 유지합니다.

관리형 테이블은 Hive에게 메타데이터와 파일의 소유권을 부여하므로 삭제하십시오.ping 이 작업은 데이터 웨어하우스 디렉터리에서 데이터를 삭제합니다. 외부 테이블에는 메타데이터만 저장되며, 삭제 작업은 해당 테이블을 삭제하는 방식으로 진행됩니다.ping 이 기능은 기본 파일을 그대로 유지합니다.

학습된 비용 모델은 실행 통계를 플래너에 다시 제공하여 정적 추정치보다 스캔 볼륨, 조인 순서 및 파티션 가지치기를 더 정확하게 예측합니다. 클라우드 플랫폼은 압축 및 파티션 레이아웃 권장 사항과 같은 동일한 신호를 제공합니다.

Copilot은 HiveQL 조인, 윈도우 함수 등을 초안합니다. Java 댓글에서 가져온 UDF 골격은 상용구 작업을 줄여줍니다. 열 이름, 파티션 키 및 데이터 유형은 실제 메타스토어와 먼저 비교하여 확인해야 합니다.

예. Hive 0.14 버전에서 UPDATE 및 DELETE 작업이 추가되었고, 이후 릴리스에서는 트랜잭션 테이블에 대한 완전한 ACID 지원이 제공되었습니다. Hive 4.x 버전은 스냅샷 격리 및 스키마 진화를 통해 Apache Iceberg 테이블을 사용하여 이 기능을 확장했습니다.

세 가지 모두 동일한 파일에 SQL을 노출합니다. Hive는 장시간 배치 작업을 선호하며 다른 플랫폼들이 읽는 메타스토어를 소유합니다. Spark SQL은 혼합 파이프라인에 적합하고, Trino는 여러 소스에 걸친 대화형 쿼리를 지원합니다.

네, 주로 Hive Metastore를 통해 이루어지며, 이는 여전히 카탈로그 표준으로 자리 잡고 있습니다. SparkTrino, Presto, Flink 모두 읽기 기능을 지원합니다. Hive 자체는 여전히 예약된 배치 변환 및 웨어하우스 로드를 처리합니다.

이 게시물을 요약하면 다음과 같습니다.