kill

minio, hadoop-s3, iceberg, stremPark, hive

영구우 2025. 5. 20. 17:15

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