kill

minio, hadoop

영구우 2025. 5. 15. 10:03

1. 관계 요약

항목                      MinIO                                               Hadoop HDFS
목적                    고성능 오브젝트 스토리지 (S3 호환)    분산 파일 시스템
주요 인터페이스   S3 API (REST 기반)                          Hadoop API (FileSystem API)
연동 가능성          Hadoop에서 S3A 커넥터 통해           MinIO를 Hadoop 외부 S3
                            MinIO 사용 가능                                스토리지처럼 연결

- MinIO는 Hadoop 클러스터에서 S3-compatible 스토리지로 사용될 수 있음
- HDFS 대체 또는 보완 스토리지로 MinIO를 사용 가능
- MinIO는 클라우드형 오브젝트 스토리지, Hadoop은 분석 및 배치 처리 중심
- 함께 쓰면 유연한 저장소 + 강력한 데이터 처리 파이프라인 구성 가능

2. MinIO + Hadoop 조합으로 가능한 활용

1) Hadoop의 외부 저장소로 MinIO 사용
• Hadoop에서 fs.s3a 스킴으로 MinIO를 마운트
• HDFS 대신 MinIO를 통해 데이터를 저장하고 불러올 수 있음
• 예: hadoop fs -ls s3a://minio-bucket/path

2) Apache Hive, Spark, Flink 등과 연동
• Hive, Spark, Flink 등의 Hadoop 기반 처리 엔진에서 MinIO를 S3처럼 연결하여 데이터를 읽고 씀
• 예: Spark에서 spark.hadoop.fs.s3a.endpoint, accessKey, secretKey 등을 설정해 MinIO에 접근

3) Iceberg, Delta Lake 같은 테이블 포맷과 연동
• MinIO를 메타데이터 및 데이터 저장소로 사용해 Iceberg 테이블 구성
• Hadoop catalog 또는 Hive Metastore와 함께 Iceberg를 구성 가능

4) 비용 절감 및 성능 최적화
• HDFS는 디스크 기반 + 복제 방식 → 스토리지 비용 ↑
• MinIO는 EC(Erasure Coding) 지원 + S3 인터페이스 → 비용 및 내결함성 우수

3. 다운로드, 설치
    3.1. OpenSSH 서버 설치( 설치되어 있으면 3.4. 이동 )
        $ sudo apt update
        $ sudo apt install openssh-server -y
    3.2. SSH 서버 실행
        $ sudo systemctl enable ssh
        $ sudo systemctl start ssh
    3.3. ssh localhost 접속 확인
        $ ssh localhost
    3.4. hadoop 다운로드, 설치
        $ wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
        $ tar -xvzf hadoop-3.3.6.tar.gz
        $ sudo mv hadoop-3.3.6 /usr/local/hadoop

4. 환경변수( ~/.bashrc 또는 ~/.zshrc )
    4.1. 사용하는 쉘 확인
        $ echo $SHELL
            예) /bin/bash
        $ nano ~/.bashrc
        아래 내용 추가 또는 생성
        export HADOOP_HOME=/usr/local/hadoop
        export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
        export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
        export HADOOP_CLASSPATH=$HADOOP_HOME/share/hadoop/tools/lib/*

    적용
        source ~/.bashrc
    4.2. Hadoop 내부 설정 파일에 JAVA_HOME 설정
        $ nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh
        다음 줄 찾아서 수정 또는 추가
        export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
        적용
        $ source ~/.bashrc

5. Hadoop 기본 설정 파일 수정
core-site.xml 설정 ( $HADOOP_HOME/etc/hadoop/core-site.xml )
    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:9000</value>
        </property>
    </configuration>

hdfs-site.xml 설정 (간단한 싱글 노드용)
    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
    </configuration>

6. HDFS 이름노드 포맷
    $ hdfs namenode -format

7. 데몬시작
    $ start-dfs.sh
    접근 거부시 SSH 설치 후 다시 시도( 5.3.1. 이동 )
    권한 거부 시 SSH키 생성 및 추가
    7.1. SSH 키 생성 (이미 있다면 건너뛰어도 됨)
        $ ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
    7.2. 공개키를 authorized_keys에 추가
        $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
        $ chmod 600 ~/.ssh/authorized_keys
    7.3. localhost에 SSH 테스트
        $ ssh localhost

8. 동작 확인
    $ jps
    - NameNode, DataNode, SecondaryNameNode가 보이면 성공

9. minio - hadoop 연동
    9.1. 선행조건( 테스트 환경 )
        - MinIO 실행 중
        - 접근할 수 있는 endpoint, access key, secret ke 알고 있어야
        - endpoint: http://localhost:9000
        - access key: minioadmin
        - secret key: minioadmin
        - 버킷명: my-bucket
    9.2. Hadoop 설정파일 수정: core-site.xml
        $ nano /usr/local/hadoop/etc/hadoop/core-site.xml
<configuration>
  <property>
    <name>fs.s3a.endpoint</name>
    <value>http://localhost: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>

    9.3. 필요한 Hadoop JAR 확인
        - hadoop-aws
        - aws-java-sdk-bundle
        $ ls $HADOOP_HOME/share/hadoop/tools/lib/ | grep hadoop-aws
        $ ls $HADOOP_HOME/share/hadoop/tools/lib/ | grep aws-java-sdk

        없으면 직접 다운로드
        $ cd $HADOOP_HOME/share/hadoop/tools/lib
        # Hadoop 3.3.6 기준
        $ wget https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.3.6/hadoop-aws-3.3.6.jar
        $ wget https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/1.12.262/aws-java-sdk-bundle-1.12.262.jar

    10.4. 테스트
        10.4.1. 접속
            $ hadoop fs -ls s3a://my-bucket/
        10.4.2. 테스트용 파일 업로드
            $ hadoop fs -put /etc/hosts s3a://my-bucket/test-file
            $ hadoop fs -ls s3a://my-bucket/
        10.4.3. MinIO에 있는 파일 다운로드 (로컬로 복사)
            - 파일 확인
            $ hadoop fs -ls s3a://my-bucket/
            $ hadoop fs -copyToLocal s3a://my-bucket/test002.txt ./test002.txt
            - s3a://my-bucket/test-hosts : MinIO에 저장된 객체 경로
            - ./test002.txt : 로컬에 저장할 파일 이름
        10.4.4. MinIO에서 파일 삭제
            $ hadoop fs -rm s3a://my-bucket/test002.txt

'kill' 카테고리의 다른 글

minio, hadoop-s3, iceberg, stremPark, hive  (0) 2025.05.20
minio, hadoop-s3  (4) 2025.05.16
Kafka (Helm 기반) 제거 스크립트  (2) 2025.05.14
Kafka 설치 - Bitnami Helm Chart  (20) 2025.05.14
strimzi operator, helm 삭제  (0) 2025.05.14