본문 바로가기

Data Engineering/Apache Spark

[Spark] Ubuntu 컨테이너에서 PySpark로 Amazon S3 데이터 읽어오기

 
지난 글과 이어집니다

 

Airflow DAG로 Amazon S3에 파일 업로드하기 (+📚 알라딘 Open API 예제)

Airflow DAG를 사용해 파일을 Amazon s3에 업로드해보자. 💁‍♂️ Docker로 Apache Airflow 설치하는 방법은 아래 글 참고 Docker로 Apache Airflow 설치하기 (with 공식 문서🧐)데이터 파이프라인의 자동화를 구

donghae0230.tistory.com

 
 

Spark 

v3.3.4
 
 

JAR 다운로드

S3A와의 연동을 위한 aws-java-sdk-bundle 및 hadoop-aws JAR 파일 다운로드 

wget wget https://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk-bundle/1.11.1026/aws-java-sdk-bundle-1.11.1026.jar
wget https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.3.2/hadoop-aws-3.3.2.jar

 
✔ (주의) 설치된 Hadoop 및 Spark 버전과 호환되는 버전의 파일 다운로드 (Maven Repository 확인)
 
*S3A: S3의 데이터를 읽고 쓰기 위해 Hadoop에서 제공하는 파일 시스템 인터페이스. Hadoop의 다양한 서브 프로젝트(예) Apache Spark 등)에서 AWS S3와 상호작용 할 수 있도록 한다. 
 
 

Spark Config 설정

파일 시스템 지정 및 AWS 계정의 Access Key와 Secret Key 설정  

# $SPARK_HOME/conf/spark-defaults.conf

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=[SECRET_KEY]

 
 

Jupyter Notebook 실행

jupyter notebook --ip='0.0.0.0' --port=8888

 
 

AWS Region 설정

from pyspark.sql import SparkSession
from pyspark import SparkConf, SparkContext

conf = SparkConf()
conf.set("spark.hadoop.fs.s3a.endpoint", "s3.ap-northeast-2.amazonaws.com")

# conf 확인
# spark.sparkContext.getConf().getAll()

 
SparkConf 객체를 생성하고 S3A 파일 시스템의 엔드포인트를 AWS 서울 리전("s3.ap-northeast-2.amazonaws.com")으로 설정
 
 

Spark Session 설정

spark = SparkSession.builder \
    .config(conf=conf) \
    .appName("spark_test") \
    .getOrCreate()

 
 
 

Amazon S3 데이터 읽기

S3에 parquet 형식으로 저장된 데이터 읽기

df = spark.read.format('parquet').load('s3a://aladin-books-bucket/raw/books.parquet')

 
 
✔ 데이터 확인

df['title', 'author'].limit(5).show()