주요 컨텐츠로 이동

Apache Hive (아파치 하이브)

Databricks 무료로 시작하기

Apache Hive란 무엇입니까?

Apache Hive는 광범위한 Hadoop 에코시스템에 속하는 Apache Hadoop Distributed File System(HDFS)에서 추출한 대용량 데이터세트를 읽고, 쓰고, 관리하도록 설계된 오픈 소스 데이터 웨어하우스 소프트웨어입니다.

Apache Hive는 광범위한 Apache Hive 문서 및 지속적 업데이트를 통해 쉽게 액세스할 수 있는 방식으로 계속해서 데이터 처리를 혁신합니다.

Apache Hive의 역사

Apache Hive는 Joydeep Sen Sarma와 Ashish Thusoo가 Facebook에 근무하던 시절에 함께 구상하고 만들어낸 오픈 소스 프로젝트입니다. Hive는 Apache 하둡의 하위 프로젝트로 시작했지만, 결과적으로는 그 자체로 최상위 프로젝트 지위를 얻게 되었습니다. 하둡과 MapReduce 작업은 제한이 점점 심해지고, 데이터 크기는 점점 커져 2006년에는 매일 몇십 GB 수준이었지만 겨우 몇 년 만에 일일 1TB에서 15TB로 늘어났습니다. Facebook 엔지니어로서는 복잡한 작업을 간편하게 실행할 수 없었고, 이 때문에 Hive가 탄생하게 된 것입니다.

Apache Hive는 두 가지 목표를 이루기 위해 고안되었습니다. 하나는 SQL 기반 선언 언어로서 SQL로는 부족할 때 엔지니어가 자체적으로 스크립트와 프로그램을 플러그인할 수 있게 허용하기도 하는 것인데, 이 때문에 엔지니어링 업계(SQL Skills 기반) 대부분이 다른 언어에 비해 극히 적은 수준의 타격이 발생하고 재교육도 별로 필요 없이 Hive를 사용할 수 있습니다.

둘째, Hive는 조직 내 모든 데이터 세트를 중앙 집중화한 메타데이터 스토어(하둡 기반)를 제공했습니다. Apache Hive는 처음에는 Facebook 내부에서 개발되었지만, Netflix와 같은 다른 기업에서도 사용하고 개발되고 있는 프로젝트입니다. Amazon에서도 Amazon Web Services의 Amazon Elastic MapReduce에서 Apache Hive 소프트웨어 분기를 유지관리하고 있습니다.

HIVE의 기능은 어떤 것이 있습니까

Apache Hive는 하둡의 HDFS는 물론 이와 호환되는 파일 시스템(예: Amazon S3, Azure Blob Storage, Azure Data Lake Storage, Google Cloud Storage  및 Alluxio 등)에 보관된 대규모 데이터 세트 분석을 지원합니다.

SQL과 유사한 쿼리 언어인 HiveQL를 제공하는데, 여기에 읽기 스키마(schema-on-read)가 포함되어 있어 쿼리를 Apache Spark, MapReduce, Apache Tez 작업으로 투명하게 변환합니다. 이외에 Hive의 다른 기능은 다음과 같습니다.

  • Hive Data Functions는 대규모 데이터 세트의 처리와 쿼리에 도움을 제공합니다. 이런 함수가 제공하는 기능 중에는 문자열 조작, 날짜 조작, 타입 변환, 조건 연산자, 수학적 함수 등이 있으며 이외에도 여러 가지가 있습니다.
  • 관계형 데이터베이스 관리 시스템 내의 메타데이터 스토리지입니다.
  • Parquet, 일반 텍스트, RCFile, HBase, ORC 및 이외에도 다른 여러 가지 스토리지 유형이 있습니다.
  • 알고리즘을 사용해 하둡 에코시스템에 저장된 압축 데이터 작업
  • 데이터, 문자열 및 기타 데이터 마이닝 툴을 조작하는 기본 내장 사용자 정의 함수(Built-in user-defined functions, UDF)입니다. Hive는 UDF 세트 확장을 지원하여 기본 내장 함수로는 지원되지 않는 사용 사례를 처리합니다.
  • SQL과 유사한 쿼리(HiveQL)는 MapReduce나 Tez, 또는 Spark 작업으로 묵시적으로 변환됩니다.

Apache Hive 아키텍처 및 주요 Apache Hive 구성 요소

Apache Hive 아키텍처의 핵심 구성 요소는 Hive Server 2, Hive Query Language(HQL), External Apache Hive Metastore, Hive Beeline Shell입니다.

Hive Server 2

Hive Server 2는 사용자와 애플리케이션에서 보내는 요청을 수락하고, 실행 계획을 생성한 후, SQL 쿼리를 처리할 YARN 작업을 자동 생성합니다. 또한, 이 서버는 Hive 옵티마이저와 Hive 컴파일러를 지원함으로써 데이터 추출과 처리를 간소화합니다.

Hive 쿼리 언어

Apache Hive는 SQL 연상 코드를 구현하도록 지원하기 때문에 길게 이어진 JavaScript 코드 속에서 비구조적 데이터를 분류할 필요가 없고, 사용자는 내장된 HQL 명령(HQL)을 사용하여 쿼리를 보낼 수 있습니다. 이러한 명령은 비용 및 시간 면에서 효율적인 방식으로 대규모 데이터세트를 탐색하고, 결과를 개량하고, 데이터를 공유하는 데 사용할 수 있습니다.

Hive Metastore

Apache Hive 인프라의 중앙 리포지토리인 메타스토어에 모든 Hive 메타데이터가 저장됩니다. 메타스토어에서 메타데이터는 Hive 테이블 및 파티션 형식으로 구성되어 모든 관계형 데이터베이스에서 데이터를 비교할 수 있게 됩니다. 여기에는 표 이름, 열 이름, 데이터 유형, 파티션 정보, HDFS에서의 데이터 위치 등이 있습니다.

Hive Beeline Shell

다른 데이터베이스 관리 시스템(DBMS)과 마찬가지로, Hive는 사용자가 HQL 명령을 실행할 수 있는 명령줄 인터페이스가 내장되어 있습니다. 또한 Hive shell도 Hive JDBC 및 ODBC 드라이버를 실행하므로 Open Database Connectivity 또는 Java Database Connectivity 애플리케이션에서 쿼리를 실행할 수 있습니다.

Apache Hive 소프트웨어의 작동 원리

Hive Server 2는 사용자와 애플리케이션에서 보내는 요청을 수락한 다음, 실행 계획을 생성하고 SQL 쿼리를 처리하기 위한 YARN 작업을 자동 생성합니다. 이 YARN 작업은 MapReduce, Tez나 Spark 워크로드로 생성할 수 있습니다.

그런 다음, 이 작업은 하둡에서 분산형 애플리케이션으로 작동합니다. SQL 쿼리가 처리되고 나면 그 결과는 최종 사용자나 애플리케이션에 반환되거나, HDFS로 전송됩니다.

그러면 Hive Metastore가 Postgres, MySQL과 같은 관계형 데이터베이스를 활용하여 이 메타데이터를 유지하고 Hive Server 2가 쿼리 계획에서 테이블 구조를 가져옵니다. 경우에 따라서 애플리케이션이 기본 처리 과정에서 메타스토어를 검색할 수도 있습니다.

그런 다음, Hive 워크로드를 하둡 리소스 관리자인 YARN에서 실행하여 하둡 작업을 실행할 수 있는 처리 환경을 제공합니다. 이 처리 환경은 할당된 메모리, 그리고 하둡 클러스터의 다양한 작업자 노드 CPU로 구성되어 있습니다.

YARN은 HDFS 메타데이터 정보를 활용하여 필요한 데이터가 저장된 곳에서 처리하려고 시도합니다. MapReduce를 적용한 Tez, Spark, Hive는 SQL 쿼리용 코드를 MapReduce, Tez, Spark 작업으로 자동 생성할 수 있습니다.

Hive는 최근 들어서야 MapReduce를 활용하기 시작했지만, 대부분 Cloudera 하 배포에서는 MapReduce나 때로는 Spark를 사용하도록 Hive를 구성합니다. Hortonworks(HDP) 배포의 경우 보통 Tez를 실행 엔진으로 설정합니다.

Apache Hive가 사용한 5가지 데이터 유형은 무엇입니까?

Apache Hive는 일괄 처리를 통해 빠른 속도로 페타바이트 규모 데이터를 효율적으로 추출하고 분석할 수 있어 데이터 처리뿐만 아니라 즉석 쿼리를 실행하는 데도 이상적입니다.

Apache Hive 데이터 유형은 숫자, 날짜/시간, 문자열, 복합, 기타, 이렇게 5가지로 구성됩니다.

숫자 데이터 유형

이름에서 알 수 있듯이, 이러한 데이터 유형은 정수를 기반으로 합니다. 예를 들어 ‘TINYINT,’ ‘SMALLINT,’ ‘INT,’ ‘BIGINT’ 등의 유형이 있습니다.

날짜/시간 데이터 유형

이러한 데이터 유형을 사용하면 사용자가 입력값으로 허용되는 ‘TIMESTAMP,’ ‘DATE,’ ‘INTERVAL’로 시간 및 날짜를 입력할 수 있습니다.

문자열 데이터 유형

이 유형의 데이터는 매우 단순 글로 작성된 텍스트 또는 '문자열'을 처리를 위한 데이터로 구현할 수 있습니다. 문자열 데이터 유형에는 ‘STRING,’ ‘VARCHAR,’ ‘CHAR’가 포함됩니다.

복합 데이터 유형

가장 발전된 데이터 유형 중 하나인 복합 유형은 보다 복잡한 데이터를 기록하고 ‘STRUCT’, ‘MAP,’ ‘ARRAY,’ ‘UNION’과 같은 유형으로 구성됩니다.

기타 유형

이 네 가지 카테고리에 속하지 않는 데이터 유형은 기타 데이터 유형이라고 하며, ‘BOOLEAN,’ ‘BINARY’ 등의 입력값을 받을 수 있습니다.

Hive Apache에서 Map Join의 작동 원리

Apache Hive에서 Map Join은 데이터 처리의 Map-Reduce 단계를 우회하면서 두 테이블의 데이터를 결합하여, 또는 '조인'함으로써 쿼리 속도와 효율을 높이는 데 사용하는 기능입니다.

관계형 데이터베이스 관리 시스템(RDBMS)은 무엇이고 Apache Hive에서는 어떻게 사용합니까?

관계형 데이터베이스 관리 시스템(RDBMS)은 행이나 열 기반 테이블 구조로 메타데이터를 저장하여 작동하는 데이터베이스 모델이며, 서로 다른 데이터세트를 연결하고 비교할 수 있습니다.

Apache Hive는 RDBMS를 사용하여 모든 데이터를 안전하고, 안정적이면서도 정확하게 저장하고 처리합니다. 역할 기반 보안과 암호화된 통신 등의 기능으로 적절한 사람에게만 추출된 정보에 대한 액세스 권한을 부여하도록 하기 때문입니다.

Apache Hive와 기존 RDBMS의 차이는 무엇입니까?

Apache Hive와 RDBMS는 몇 가지 핵심적인 차이가 있습니다.

  • RDBMS 기능은 읽기, 쓰기 작업을 여러 번 처리하지만, Hive는 쓰기에는 한 번, 읽기에는 여러 번 작업합니다.
  • Hive는 읽기 스키마(schema-on-read) 규칙을 따르는데, 데이터 검증이나 검사, 파싱은 존재하지 않고 파일을 복사/이동할 뿐입니다. 기존 데이터베이스의 경우, 표에 스키마를 적용하면 이것이 쓰기 규칙에 스키마를 적용합니다.
  • Hive는 하둡 기반이기 때문에 다른 RDBMS와는 달리 하둡과 MapReduce와 같은 제한 사항을 준수해야 합니다.

Apache Hive vs. Apache Spark

다양한 데이터 세트에서 대량의 데이터를 처리하도록 설계된 분석 프레임워크인 Apache Spark는 R에서 Python까지 다양한 언어를 지원할 수 있는 강력한 사용자 인터페이스를 제공합니다.

Hive는 HiveQL이라는 SQL 인터페이스를 사용하여 퀄하고 분석할 행, 열, 데이터 유형이 있는 표로 데이터를 표시하는 추상화 계층을 제공합니다. Apache Hive는 Hive LLAP와 함께 ACID 트랜잭션 을 지원합니다. 트랜잭션은 다중 사용자/프로세스에서 생성, 읽기, 업데이트, 삭제(CRUID) 작업을 위해 동시에 액세스하는 환경에서 데이터의 일관된 보기를 보장합니다.

Databricks는 ACID 트랜잭션을 보장한다는 점에서 Hive LLAP와 유사한 Delta Lake를 제공하지만, 데이터 처리 시 성능과 안정성에 도움이 되는 여러 가지 장점이 있습니다. Spark SQL은 행, 열, 데이터 유형이 있는 표로 구조화된 데이터를 표시하는 Apache Spark의 인터랙팅 모듈입니다.

Spark SQL은 SQL 2003 규정을 준수하고Apache Spark를 데이터 처리에 분배 엔진으로 사용합니다. Spark SQL 인터페이스와 더불어 DataFrames API를 Java, Scala, Python, HiveQL과 유사한 R. Spark SQL을 사용하는 데이터와 상호작용하는 데 사용할 수 있습니다.

둘다 ANSI SQL 구문을 사용하며 Hive 함수의 대부분은 Databricks에서 실행됩니다. 여기에는 날짜/시간 변환 및 파싱, 컬렉션, 문자열 조작, 수학적 연산, 조건 함수 등 Hive 함수가 포함됩니다.

Spark SQL에 맞게 변환하는 데 필요하거나 Databricks의 Spark SQL에 존재하지 않는 Hive에 특정된 일부 함수도 있습니다. Databricks의 Spark SQL로 작업하는 모든 HiveQL ANSI SQL 구문을 기대할 수 있습니다.

여기에는 ANSI SQL 집계 및 분석 함수가 포함됩니다. Hive는 Optimized Row Columnar(ORC) 파일 형식에 최적화되어 있으며 Parquet도 지원합니다. Databricks는 Parquet과 Delta에 최적화되어 있지만, ORC도 지원합니다. 파일 형식으로 오픈 소스 Parquet을 사용하는 Delta 사용을 언제나 권장합니다.

Apache Hive vs. Presto

원래 Facebook에서 만든 PrestoDB는 Presto라고 더 많이 알려져 있는데, 사용자가 빠른 속도로 페타바이트의 데이터를 처리하고 분석할 수 있는 분산형 SQL 쿼리 엔진입니다. Presto의 인프라는 MySQL, Teradata에서부터 MongoDB, Cassandra에 이르기까지 관계형 데이터베이스 및 비관계형 데이터베이스의 통합을 모두 지원합니다.

추가 자료

용어집으로 돌아가기