ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 확인

    반응형

    댓글

Designed by Tistory.