kill

minio, hadoop-s3

영구우 2025. 5. 16. 14:58

Hadoop-S3 (S3A) 정리

1. 정의
    **Hadoop-S3(S3A)**는 Hadoop이 Amazon S3 또는 MinIO 같은 S3 호환 오브젝트 스토리지에 접근할 수 있게 해주는 파일 시스템 커넥터

2. 주요 구성 요소
hadoop-aws.jar                 Hadoop이 S3A를 인식하도록 하는 커넥터
aws-java-sdk-bundle.jar  AWS S3 API를 사용하기 위한 Java SDK
core-site.xml                     S3A 설정을 명시하는 Hadoop 설정 파일 (endpoint, 키 등)

3. 작동 방식
    - 내부적으로 s3a:// 스킴을 사용해 오브젝트 스토리지(S3/MinIO)에 접근
    - HDFS처럼 다룰 수 있도록 추상화
    - 예: hadoop fs -ls s3a://my-bucket/

4. MinIO와 Hadoop-S3의 관계
기본 관계  MinIO는 S3A의 backend로 동작 가능
역할          Hadoop-S3 커넥터가 MinIO에 s3a://를 통해 접근
설정 방법  core-site.xml 또는 Spark 설정에 MinIO endpoint, access key, secret key를 넣으면 연동
사용 예     Iceberg, Spark, Presto 등이 s3a://my-bucket/... 경로를 통해 MinIO의 데이터를 읽고 쓰기

[Iceberg or Spark or Presto]
         |
         | (fs.s3a.impl)
         v
[Hadoop S3A 커넥터 (hadoop-aws + aws-sdk)]
         |
         v
[MinIO 서버 (S3 호환 스토리지)]

5. Hadoop-s3 만으로 충분 한 경우
    - Spark, Iceberg 등에서 단순히 MinIO를 스토리지로만 쓸 경우
    - hadoop fs 명령이나 HDFS 클러스터가 필요 없는 경우
    - 이럴 때는 Hadoop을 설치할 필요 없이 필요한 JAR만 넣고 설정만 적용하면 충분

6. JDK 설치( 이미 되어 있다면 다음 단계 )
    $ sudo apt update
    $ sudo apt install openjdk-11-jdk -y
    $ java -version

7. JAR 다운로드
    - hadoop-aws-3.3.6.jar
    - aws-java-sdk-bundle-1.12.367.jar
    $ 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.367/aws-java-sdk-bundle-1.12.367.jar
    - 버전은 사용하는 프레임워크(Spark, Iceberg 등)와 맞춰야 함. 위는 Spark 3.5.x와 호환

8. MinIO 연동 설정 (core-site.xml)
    $ mkdir -p ~/hadoop-conf
    $ nano ~/hadoop-conf/core-site.xml

<configuration>
  <!-- MinIO Access Key -->
  <property>
    <name>fs.s3a.access.key</name>
    <value>minioadmin</value>  <!-- 본인 MinIO ID로 수정 -->
  </property>

  <!-- MinIO Secret Key -->
  <property>
    <name>fs.s3a.secret.key</name>
    <value>minioadmin</value>  <!-- 본인 MinIO PW로 수정 -->
  </property>

  <!-- MinIO 접속 엔드포인트 -->
  <property>
    <name>fs.s3a.endpoint</name>
    <value>http://localhost:9000</value>  <!-- MinIO 주소 -->
  </property>

  <!-- 경로 스타일 설정 (MinIO는 true여야 함) -->
  <property>
    <name>fs.s3a.path.style.access</name>
    <value>true</value>
  </property>

  <!-- S3A 커넥터 지정 -->
  <property>
    <name>fs.s3a.impl</name>
    <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
  </property>

  <!-- 연결 시간 제한 (선택사항) -->
  <property>
    <name>fs.s3a.connection.timeout</name>
    <value>5000</value>
  </property>

  <!-- 버킷 캐시 설정 끄기 (옵션) -->
  <property>
    <name>fs.s3a.fast.upload</name>
    <value>true</value>
  </property>
</configuration>

9. 테스트
    9.1. Java 파일 생성
        $ nano MinioTest.java

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import java.net.URI;

public class MinioTest {
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        conf.addResource(new Path("/home/ubuntu/hadoop-conf/core-site.xml"));  // core-site.xml 위치

        FileSystem fs = FileSystem.get(new URI("s3a://my-bucket"), conf);
        RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("s3a://my-bucket/"), false);
        while (files.hasNext()) {
            System.out.println(files.next().getPath());
        }
    }
}

        $ cp ~/hadoop-aws-3.3.6.jar ~/minio-s3a-test/
        $ cp ~/aws-java-sdk-bundle-1.12.367.jar ~/minio-s3a-test/


'kill' 카테고리의 다른 글

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
Strimzi Kafka Operator 기반으로 Kafka를 설치  (30) 2025.05.13