Apache Hive 개요
Apache Hive는 Hadoop 기반의 데이터 웨어하우스 인프라로, 구조화된 데이터 파일을 테이블 형태로 관리하고 SQL과 유사한 쿼리 언어인 HQL(Hive Query Language)을 통해 데이터를 조회할 수 있게 해줍니다. 내부적으로 HQL은 MapReduce 작업으로 변환되어 Hadoop 클러스터에서 실행됩니다.
Hive의 주요 특징
- 장점: SQL 익숙한 사용자라면 러닝 커브가 낮으며, 복잡한 MapReduce 코드를 직접 작성하지 않고도 대규모 데이터 통계 및 분석이 가능합니다.
- 단점: 모든 쿼리가 MapReduce 작업을 거치기 때문에 실시간 처리에 비해 지연 시간(Latency)이 발생할 수 있습니다.
- 특성: 주로 데이터 분석 및 배치 처리에 최적화되어 있으며, 한 번 기록하고 여러 번 읽는(Write-once, Read-many) 방식입니다. 개별 레코드의 수정이나 삭제는 지원하지 않으며 전체 데이터를 덮어쓰는 방식을 사용합니다.
Hive와 관계형 데이터베이스(RDBMS) 비교
| 비교 항목 | Apache Hive (HQL) | 전형적인 RDBMS (SQL) |
|---|---|---|
| 저장 위치 | HDFS (분산 파일 시스템) | 로컬 파일 시스템 (Raw Device) |
| 데이터 형식 | 사용자 정의 가능 (Schema on Read) | 시스템 결정 (Schema on Write) |
| 데이터 업데이트 | 제한적 (Overwrite 방식) | 지원 (Update, Delete) |
| 인덱스 | 일부 지원 (상대적으로 약함) | 강력한 인덱스 기능 |
| 실행 엔진 | MapReduce / Tez / Spark | Database Executor |
| 확장성 | 매우 높음 | 상대적으로 낮음 |
Hive 설치 및 환경 설정
1. Hive 바이너리 다운로드 및 압축 해제
Apache Hive 공식 홈페이지에서 적절한 버전을 다운로드한 뒤, 원하는 경로에 압축을 해제합니다.
tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /usr/local
mv /usr/local/apache-hive-1.2.1-bin /usr/local/hive
2. 시스템 환경 변수 설정
/etc/profile 파일을 열어 Hive 실행 경로를 등록합니다.
# Hive Environment
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
설정을 적용하기 위해 다음 명령어를 실행합니다.
source /etc/profile
3. Hive 설정 파일 수정
먼저 Hive 설정 디렉터리로 이동하여 템플릿 파일을 복사합니다.
cd $HIVE_HOME/conf
cp hive-env.sh.template hive-env.sh
hive-env.sh 파일을 편집하여 Java 및 Hadoop 경로를 지정합니다.
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HADOOP_HOME=/usr/local/hadoop
export HIVE_HOME=/usr/local/hive
4. 메타스토어(Metastore) 구성을 위한 hive-site.xml 설정
Hive는 기본적으로 Derby를 메타데이터 저장소로 사용하지만, 다중 접속 환경을 위해 MySQL을 사용하는 것이 권장됩니다. hive-site.xml 파일을 생성하고 다음과 같이 작성합니다.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive_metastore?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive_admin</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive_pass</value>
</property>
</configuration>
MySQL 데이터베이스 구성
Hive 메타데이터를 저장할 MySQL 데이터베이스와 사용자를 생성합니다.
# MySQL 접속
mysql -u root -p
# 데이터베이스 생성
CREATE DATABASE hive_metastore;
# 사용자 생성 및 권한 부여
CREATE USER 'hive_admin'@'localhost' IDENTIFIED BY 'hive_pass';
GRANT ALL PRIVILEGES ON hive_metastore.* TO 'hive_admin'@'localhost';
GRANT ALL PRIVILEGES ON hive_metastore.* TO 'hive_admin'@'%' IDENTIFIED BY 'hive_pass';
FLUSH PRIVILEGES;
※ 주의: MySQL JDBC 커넥터(jar 파일)를 다운로드하여 $HIVE_HOME/lib 디렉터리에 반드시 추가해야 합니다.
Hive 실행
모든 설정이 완료되면 터미널에서 다음 명령어를 입력하여 Hive CLI에 접속합니다.
hive