Data Engineering

Spark + S3 연동하기

HOONY_612 2024. 1. 15. 16:12
반응형

 

이전 글에서는 SparkSQL로 LocalFileSystem에 Data를 기록하고 Hive Metastore에 Metadata를 기록하였다.

이번에는 LocalFileSystem 대신에 AWS S3 FileSystem을 사용하여 Spark 및 SparkSQL을 사용해보자.

S3는 만들어져 있고 Access Key, Private Key 발급받는 과정은 생략한다.

 

Spark Configuration 설정하기

 

1. AWS 사용을 위한 Jar 다운로드 및 ${SPARK_HOME}/jars 에 넣기

 

Spark와 아래 Jar버전이 안맞는 경우는 런타임 시 에러가 발생할 수 있으므로 확인하고 다운로드하자.

 

* spark: 3.5.0

* aws-java-sdk-bundle-1.12.262.jar

* hadoop-aws-3.3.4.jar

 

2. ${SPARK_HOME}/spark-defaults.conf S3 설정하기

spark.hadoop.fs.s3a.impl org.apache.hadoop.fs.s3a.S3AFileSystem
spark.hadoop.fs.s3a.access.key ${ACCESS_KEY}
spark.hadoop.fs.s3a.secret.key ${PRIVATE_KEY}

 

 

SparkShell + S3  연동 읽기 테스트

 

1. CSV File을 아무거나 다운로드 받고 S3에 업로드 하자.

 

 

 

2. ${SPARK_HOME}/bin/spark-shell 실행 후 코드 작성

 

import org.apache.spark.sql.SparkSession

val spark: SparkSession = SparkSession.builder().appName("SparkByExamples.com").getOrCreate()
val df = spark.read.csv("s3a://martinispark/test/test.csv")
df.show(false)
df.printSchema()

 

 

SparkShell + S3  연동 쓰기 테스트

1. {SPARK_HOME}/bin/spark-shell 실행 후 코드 작성

 

import org.apache.spark.sql.SparkSession

val spark: SparkSession = SparkSession.builder().appName("SparkByExamples.com").getOrCreate()
val df = spark.read.csv("s3a://martinispark/test/test.csv")
df.write.csv("s3a://martinispark/test/copy") # Directory 지정

 

 

2. S3 Bucket 확인

아래와 같은 파일이 만들어진다. 파일을 확인해보면 데이터가 나눠져 저장되어있다. 

 

SparkSQL + S3  연동 데이터 쓰기 테스트

데이터를 기존 로컬 파일시스템이 아닌 S3 파일시스템에 써보자.

 

1. Table 생성

create table s3test(a String) location 's3a://martinispark/sqltest';

 

 

2. 데이터 생성

insert into s3test (a) values ("hello");

select * from s3test
//hello

 

 

3. S3 확인

반응형