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 |