Hive(하이브)란 무엇일까?
하이브는 Hadoop ecosystem의 하나로 데이터를 모델링하고 프로세싱하는 '데이터 웨어하우징 솔루션'으로, HDFS와 분산 대용량 데이터에 대해 (SQL과 유사한) hiveQL 언어로 쿼리 질의를 실행할 수 있는 도구이다. 더 쉽게 생각하면 HDFS 안의 파일을 SQL 언어를 통해 조회할 수 있게 해주는 기능이라 이해할 수 있다. 하둡에 대한 정보는 아래 페이지를 참고하도록 하자.
Hadoop(하둡)에 대하여
하둡이란 무엇일까? 빅데이터 환경에서 일을 하다보면 Hadoop(하둡)에 대해서 한번쯤은 들어보거나 실제 하둡 환경에서 작업해봤을 것이다. 하둡에 대한 가장 보편적인 정의는 프로그래밍을 통해
developers-haven.tistory.com
하둡 에코시스템이라는 것은 데이터를 더 효율적으로 사용하기 위해 진행된 여러 하둡 프로젝트 전체를 가리킨다. 초반의 하둡은 대규모 데이터를 분산 저장하고 처리하기 위해 HDFS(for 분산저장)와 MapReduce(for 병렬처리) 코어 프로젝트가 진행되었다. 시간이 지나면서 데이터를 더 잘 다루기 위해서 여러 서브 프로젝트가 진행되었는데 그중 하나가 Hive인 것이다. 그리고 하이브는 테이블, 데이터, 파티션 등에 대한 메타 정보를 보관하고 있는데 이에 대해서는 아래 페이지를 참고하도록 하자.
Hive MetaStore(메타스토어)에 대하여
메타스토어(MetaStore)란? 테이블과 데이터, 파티션에 대한 모든 정보를 메타스토어에 저장하여 관리하며, 사용자의 요청에 따라 관련된 메타 정보를 제공해준다. ex) Hive 테이블은 schema on read 특성
developers-haven.tistory.com
Hive의 DDL(테이블을 정의하고 사용하는 문법)에 대한 내용은 너무 방대하기 때문에 [Hive DDL - Apache Hive] 페이지를 참고하여 본인이 작성하고 싶은 쿼리 문법을 알아보길 바라며, 하이브 테이블에 대한 추가 정보에 대해서 알아보도록 하자.
테이블 타입
하이브는 External 테이블과 Managed(=Internal) 테이블로 구분된다.
1. External 테이블
- 테이블 삭제시 스키마(=테이블 형상)만 삭제되고 데이터는 유지된다.
- 테이블 삭제에도 데이터 파일이 유지되므로 중요한 데이터의 경우에는 External 테이블로 만드는 것을 권장한다.
2. Managed(=Internal) 테이블
- 테이블 삭제시 스키마와 데이터 모두 함께 삭제된다.
- 테이블 생성시 따로 옵션을 주지 않으면 기본적으로 Managed 테이블로 만들어진다.
CREATE [EXTERNAL/MANAGED] TABLE [IF NOT EXISTS] 스키마.테이블명 -- IF NOT EXISTS는 동일 테이블이 만들어지는 것을 방지하기 위해 쓰는 구문(동일 테이블이 없는 경우에만 생성)
(
컬럼명1 데이터 타입 COMMENT '컬럼설명',
컬럼명2 데이터 타입 COMMENT '컬럼설명',
컬럼명3 데이터 타입 COMMENT '컬럼설명'
)
COMMENT '테이블설명';
파티션 타입
하이브는 고정 파티션과 동적 파티션을 지정할 수 있다. 파티션은 폴더 단위로 데이터를 나눠서 저장해주게 되는데, 데이터를 읽는 범위를 줄여주어 쿼리 처리 속도를 향상시켜주는 장점이 있다. (만약 파티션이 없다면 전체 데이터를 모두 조회하여 쿼리 속도가 늦어짐)
1. 고정 파티션 - 데이터 입력(Insert)시에 파티션 정보를 함께 전달하여 입력되는 파티션을 알 수 있다.
2. 동적 파티션 - 데이터 입력시에 파티션 컬럼명만 전달하여 동적으로 파티션이 생성되므로 쿼리를 실행할 때는 파티션을 알지 못한다.
-- 고정파티션 (yyyymmdd 파티션에 '20230725' 값을 직접 전달하여 파티션 생성)
INSERT INTO TABLE 스키마.테이블(yymmdd = '20230725') SELECT * FROM 스키마.테이블;
-- 동적파티션 (select 대상 테이블에 어떤 파티션이 있는지 몰라도 자동으로 파티션 생성)
INSERT INTO TABLE 스키마.테이블(yymmdd) SELECT * FROM 스키마.테이블;
-- 파티션 지정해서 테이블 생성하는 구문
CREATE [EXTERNAL/MANAGED] TABLE [IF NOT EXISTS] 스키마.테이블명
(
컬럼명1 데이터 타입 COMMENT '컬럼설명',
컬럼명2 데이터 타입 COMMENT '컬럼설명',
컬럼명3 데이터 타입 COMMENT '컬럼설명'
)
COMMENT '테이블설명'
PARTITIONED BY (파티션컬럼명 데이터 타입 COMMENT '컬럼설명');
msck 기능
하이브는 msck 명령을 통해 최신 버전으로 파티션을 복구해준다. 만약 어떤 테이블에 데이터가 삭제되거나 추가되는 경우 현상황에 맞게 파티션을 정리해준다고 이해하면 된다.
- location 하위에 존재하는 디렉토리 정보를 이용하여 자동으로 파티션을 생성해주는 기능이다.
- 단, 한번에 너무 많은 파티션을 생성(=msck)하게 되면 작업 시간이 늘어나거나 오류가 발생할 수 있으므로 아래와 같은 옵션을 설정해주기도 한다.
-- 한번에 처리할 파티션 개수 설정(0이면 모든 파티션을 의미)
SET hive.msck.repair.batch.size = N;
-- 파티션에 허용되지 않는 값이 들어왔을때 오류를 무시하고 넘어감
SET hive.msck.path.validation = ignore;
-- msck 명령문
MSCK REPAIR TABLE 스키마.테이블명;
이번 시간에는 하둡 에코시스템 중 하나인 하이브(Hive)에 대해서 알아보았다. 하이브 안에도 여러 다양한 기능이 존재하는데 이론적으로 공부하는 것보다 실제 테이블을 만들고 실습해보면서 배워나가는 것을 추천한다.
참고: [빅데이터-하둡,하이브로 시작하기] WikiDocs
https://wikidocs.net/book/2203
'[기술공부] > BigData' 카테고리의 다른 글
Apache Spark 자료구조 - RDD (0) | 2023.11.09 |
---|---|
Apache Spark에 대하여 - 등장 배경과 아키텍처 (0) | 2023.11.09 |
Hadoop(하둡)에 대하여 (0) | 2023.08.22 |
HDFS(Hadoop Distributed File System/하둡분산파일시스템)에 대하여 (0) | 2023.08.21 |
Hive MetaStore(메타스토어) 활용방법 - (2) (1) | 2023.08.03 |