-
Spark + S3 연동하기Data Engineering 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 확인
반응형'Data Engineering' 카테고리의 다른 글
Spark + Iceberg - 3(Hidden Partitioning) (0) 2024.01.17 Spark + Iceberg - 2(Partition, Schema evolution) (0) 2024.01.16 Spark + Iceberg - 1(소개 및 연동) (0) 2024.01.16 SparkSQL CLI 대신 Spark Thrift Server (0) 2024.01.15 Hive Metastore & SparkSQL & Local FileSystem (0) 2024.01.14