ubuntu : 22.04.5 LTS
orccle : 19c
flink : 1.18.1
flink cdc : flink-sql-connector-oracle-cdc-3.1.0.jar
docker : 28.0.4
hadop : s3
minio : 2025-04-22T22-12-26z
. iceberg
1. 구성 요소별 개념 요약
MinIO: Amazon S3와 호환되는 오브젝트 스토리지. Iceberg의 데이터와 메타데이터를 저장
Hadoop S3A: s3a:// URI를 통해 MinIO에 접근할 수 있게 해주는 Hadoop의 파일 시스템 구현
Apache Iceberg: 데이터를 테이블처럼 관리할 수 있게 해주는 파일 기반 테이블 포맷 (Parquet/Avro + metadata.json 등)
Hive (Metastore): 테이블 이름, 스키마, 위치 정보를 저장하는 메타데이터 관리 서비스 (옵션)
StreamPark: Flink Job을 관리·배포·모니터링하는 웹 기반 플랫폼 (Flink에 종속)
2. 구성흐름
+------------------+
| StreamPark UI |
+--------+---------+
|
[Flink Job Submit]
|
v
+--------+---------+
| Apache Flink |
+--------+---------+
|
v
+---------+----------+
| Apache Iceberg |
| (HiveCatalog 사용) |
+---------+----------+
|
metadata via Hive Metastore
|
+------------+-------------+
| Hive Metastore |
| (backed by MySQL/Postgres) |
+--------------------------+
|
data & metadata files (parquet, json)
|
+---+---+
| MinIO |
+-------+
3. 구성 요소 간 관계 설명
3.1. Flink ↔ Iceberg
• Flink는 Iceberg Connector를 통해 테이블에 데이터를 저장함 (IcebergSink)
• 테이블은 Iceberg 포맷 (데이터 + metadata.json)
3.2. Iceberg ↔ Hive (선택적)
• Iceberg는 테이블 정보를 Hive Metastore에 저장할 수 있음 (HiveCatalog)
• Flink가 테이블 스키마/위치를 Hive에서 가져와 Iceberg 테이블로 접근 가능
3.3. Iceberg ↔ MinIO
• Iceberg는 실제 데이터/메타데이터를 s3a:// 경로에 저장
• 이 경로의 backend가 MinIO이면 MinIO에 저장됨
3.4. Hadoop S3A ↔ MinIO
• Flink와 Iceberg가 MinIO에 접근할 수 있도록 fs.s3a.endpoint 설정 필요
• Iceberg가 MinIO에 파일을 직접 쓰는 데 필요한 연결 계층
3.5. StreamPark ↔ Flink
• StreamPark는 Flink Job을 관리하는 웹 UI
• Iceberg를 직접 다루진 않지만, Flink Job이 Iceberg를 쓰게 구성 가능
4. Hive
4.1. Hive
- Apache Hive는 원래 빅데이터 SQL 처리 시스템이었지만, 지금은 그보다 “메타스토어(Metastore)” 역할로 더 많이 사용
4.2. 주요기능
SQL 엔진 HiveQL이라는 SQL로 HDFS에 저장된 데이터를 분석
Metastore 테이블 스키마, 위치, 파티션 등 메타데이터를 저장/관리하는 서비스
4.3. Hive Metastore
4.3.1. Hive Metastore 정의
- 테이블 정보를 저장/조회/공유 하는 메타데이터 서비스
- Iceberg 테이블의 위치, 구조, 포맷을 알려주는 카탈로그 역할
- 예
CREATE TABLE user (
id BIGINT,
name STRING
)
STORED AS iceberg LOCATION 's3a://my-bucket/warehouse/db/user'
이런 명령이 들어오면:
- Iceberg는 실제 파일 (.parquet, .metadata.json)을 MinIO에 저장
- Hive는 이 테이블의 이름, 위치, 스키마를 MySQL 같은 DB에 기록
→ Flink나 Spark는 user라는 테이블이 어디에 있고 어떤 구조인지를 Hive를 통해 접근
4.3.2. 구성 요소
Metastore 서비스 thrift://host:9083 포트로 동작하는 백엔드 서버
Metastore DB 실제 테이블 이름, 스키마, 파티션 정보 등을 저장하는 RDB (MySQL/PostgreSQL 등)
Client API (JDBC/Thrift) Flink, Spark, Trino, Iceberg 등이 Hive와 연결할 때 사용하는 방식
4.3.3. Hive Metastore가 관리하는 정보 예시
항목 예시
테이블 이름 sales_data_2024
스키마 id: bigint, amount: double, region: string
저장 위치 s3a://my-bucket/warehouse/sales_data_2024
포맷 Iceberg, Parquet, ORC, Text 등
파티션 키 region, year, month
4.4. 다운로드/설치
4.4.1.1. 현제 설치 버전
ubuntu: 22.04.5 LTS
oracle: 19c
flink: 1.18.1
flink cdc: flink-sql-connector-oracle-cdc-3.1.0.jar
docker: 28.0.4
hadoop: s3
minio: 2025-04-22T22-12-26z
4.4.1.2. Dockerfile
$ cd ~/hive-docker
$ nano Dockerfile
FROM apache/hive:3.1.3
# 임시로 root 사용자로 전환
USER root
RUN mkdir -p /opt/hive/auxlib
COPY jars/*.jar /opt/hive/auxlib/
RUN chmod +r /opt/hive/auxlib/*.jar
# 다시 원래 hive 사용자로 되돌림
USER hive
# Hive classpath 반영
ENV HIVE_AUX_JARS_PATH=/opt/hive/auxlib
4.4.1.3. JAR 수동 다운로드
mkdir -p hive-docker/jars
# AWS + Hadoop for S3A
wget -P hive-docker/jars https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.1.3/hadoop-aws-3.1.3.jar
wget -P hive-docker/jars https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/1.11.1024/aws-java-sdk-bundle-1.11.1024.jar
# PostgreSQL driver
wget -P hive-docker/jars https://jdbc.postgresql.org/download/postgresql-42.6.0.jar
4.4.2.1. 디렉토리 생성/ .yml 파일 생성
$ mkdir -p ~/hive-docker
$ cd ~/hive-docker
$ nano docker-compose.yml
version: '3.8'
services:
postgres:
image: postgres:14
container_name: postgres
environment:
- POSTGRES_USER=admin
- POSTGRES_PASSWORD=admin123
- POSTGRES_DB=metastore
ports:
- "5432:5432"
volumes:
- ./postgres-conf/pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf
hive-metastore:
build: .
container_name: hive-metastore
environment:
HADOOP_CONF_DIR: /opt/hive/conf
ports:
- "9083:9083"
volumes:
- ./conf:/opt/hive/conf
depends_on:
- postgres
command: ["hive", "--service", "metastore"]
hive-server:
build: .
container_name: hive-server
environment:
HADOOP_CONF_DIR: /opt/hive/conf
ports:
- "10000:10000"
volumes:
- ./conf:/opt/hive/conf
depends_on:
- hive-metastore
command: ["hive", "--service", "hiveserver2"]
4.4.2.2. core-site.xml 생성
$ mkdir -p ~/hive-docker/conf
$ cd ~/hive-docker
core-site.xml (MinIO 설정 포함)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>s3a://warehouse</value>
</property>
<property>
<name>fs.s3a.endpoint</name>
<value>http://minio:9000</value>
</property>
<property>
<name>fs.s3a.access.key</name>
<value>minioadmin</value>
</property>
<property>
<name>fs.s3a.secret.key</name>
<value>minioadmin</value>
</property>
<property>
<name>fs.s3a.path.style.access</name>
<value>true</value>
</property>
<property>
<name>fs.s3a.impl</name>
<value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
</property>
</configuration>
hive-site.xml (S3A + warehouse 설정 포함)
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:postgresql://postgres:5432/metastore</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.postgresql.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>admin</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>admin123</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>s3a://warehouse/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hive-metastore:9083</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>0.0.0.0</value>
</property>
</configuration>
4.4.2.3. /hadoop-conf/core-site.xml 추가
$ nano /home/사용자계정/hadoop/hadoop-conf/core-site.xml
<property>
<name>fs.defaultFS</name>
<value>s3a://warehouse</value>
</property>
4.4.2.4. pg_hba.conf
mkdir -p hive-docker/postgres-conf
nano hive-docker/postgres-conf/pg_hba.conf
내용
host all all 0.0.0.0/0 md5
4.4.3. hadoop-aws와 aws-java-sdk 다운로드
$ mkdir -p ~/hive-docker/jars
# Hadoop AWS + AWS SDK (버전은 Hive와 Hadoop에 맞게)
$ wget -P ~/hive-docker/jars https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/2.7.7/hadoop-aws-2.7.7.jar
$ wget -P ~/hive-docker/jars https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/1.11.1024/aws-java-sdk-bundle-1.11.1024.jar
4.4.4. 실행
$ cd hive-docker
$ docker compose build
# $ docker compose pul
$ docker compose up -d
4.4.5. 설치 확인
$ docker ps
4.4.6. Hive 접속 테스트 (Beeline 사용)
- hive-server 컨테이너 내부에서 Beeline 실행
$ docker exec -it hive-server /bin/bash
/opt # beeline -u jdbc:hive2://hive-server:10000
→ 접속되면 Hive CLI 프롬프트
- 테스트 쿼리
SHOW DATABASES;
'kill' 카테고리의 다른 글
minio, hadoop-s3 (4) | 2025.05.16 |
---|---|
minio, hadoop (6) | 2025.05.15 |
Kafka (Helm 기반) 제거 스크립트 (2) | 2025.05.14 |
Kafka 설치 - Bitnami Helm Chart (20) | 2025.05.14 |
strimzi operator, helm 삭제 (0) | 2025.05.14 |