제곧내
데이터 적재를 EC2를 통해 S3까지 성공했지만, 금전적인 문제로 Spark 처리는 로컬로 하게 되었다😂
코랩에서 Spark를 사용하여 S3의 json 파일을 읽어오고자 한다.
01. S3 버킷 권한 설정
이를 위해서는 먼저 S3의 권한을 public으로 변경해야만 한다.
권한 설정은 따로 글로 정리해두었다
"S3버킷 권한 설정 : https://hyem207.tistory.com/90
02. Colab 환경 구축 및 실행
변경 완료했다면, Colab에서의 작업 코드는 다음과 같다.
02-1. 필요한 라이브러리 설치
!wget https://repo1.maven.org/maven2/org/apache/hadoop/hadoop-aws/3.3.1/hadoop-aws-3.3.1.jar
- 'org.apache.hadoop:hadoop-aws' 라이브러리 : S3 파일 시스템 지원해줌과 동시에, hadoop3 라이브러리에 필요한 모든 기능을 제공함
- 아래에서 다운로드한 라이브러리를 SparkSession 설정 시 속성에 추가됨
pip install pyspark
- 'pyspark' 라이브러리' : python언어로 spark를 지원해줌
라이브러리 설치하면 런타임 재실행하라는 문구가 보일 것이다.
재실행 후 아래 코드를 이어서 작성 및 실행하면 된다.
02-2. 환경변수 설정
Colab에서 작업한다면 아마 환경변수를 지정해주어야 할 것이다.
만약 이를 지정 안 하면 Class org.apache.hadoop.fs.s3a.S3AFileSystem not found오류를 만나게 될 확률이 크다.
(경험담 😃)
import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages "org.apache.hadoop:hadoop-aws:3.3.1" pyspark-shell'
위는 hadoop-aws 라이브러리를 pyspark에서 로드하도록 설정하는 코드로,
'PYSPARK_SUBMIT_ARGS' 이름의 환경변수를, --packages 옵션을 사용하여 hadoop-aws 라이브러리를 지정한다.
이렇게 하면 pyspark 시작 시 자동으로 hadoop-aws 라이브러리가 로드되어 클래스를 찾을 수 있다.
02-3. SparkSession 설정
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("Read from S3") \
.config("spark.jars.packages", "org.apache.hadoop:hadoop-aws:3.3.1") \
.config("spark.hadoop.fs.s3a.impl","org.apache.hadoop.fs.s3a.S3AFileSystem") \
.config("spark.hadoop.fs.s3a.access.key","<access_key>") \
.config("spark.hadoop.fs.s3a.secret.key","<secret_key") \
.getOrCreate()
spark를 다루기 위한 SparkSession객체를 SparkSession.builder로 생성하는 코드이다.
이때 config 옵션으로 aws s3에 접근 가능하도록 옵션을 준다.
- spark.jars.packages 속성 : S3A 파일 시스템과 관련된 라이브러리를 Spark에 제공하는 데 사용됨
- spark.hadoop.fs.s3a.impl 속성 : SparkSession 객체 생성 시, HDFS에서 S3로 접근하기 위해 필요한 Hadoop 설정 정보를 지정하는 것이다. 특히 해당 속성은 S3AFileSystem 클래스의 경로를 지정하여 해당 경로의 클래스를 사용하도록 Spark에 알린다.
- spark.hadoop.fs.s3a.access.key와 secret.key 속성 : AWS access_key와 secret_key를 입력한다.
여기까지 오류가 없다면 환경 셋팅엔 문제가 없다.
바로 s3에서 데이터 불러오는 코드를 작성해보자.
📌 SparkSession이란?
SparkSession은 Spark의 진입점(entry point)으로써, Spark 애플리케이션을 실행하기 위한 정보를 가지고 있으며, RDD나 DataFrame 등의 데이터를 생성하고, 변환하고, 분석하기 위한 여러 메서드를 제공합니다.
02-4. S3 파일 읽어오기
# s3 bucket에서 json 데이터 읽어오기
df = spark.read \
.option("header", "true") \
.option("inferSchema", "true") \
.json("s3a://(버킷명)/(폴더명)/(파일명).json")
s3a를 이용하여 데이터를 불러옴으로, 그 뒤를 사용자 버킷명, 그리고 불러올 json 파일명을 입력하면 된다.
만약 csv 파일을 불러온다면 .json() 대신 .csv() 함수를 이용하면 된다
df.show()
불러온 데이터를 출력했을 때 잘 보이면 된다.
~ 정리 끝~
'#️⃣ Data Engineering > Spark' 카테고리의 다른 글
[Spark] Spark Streaming - Twitter 해시태그 분석 (2) (0) | 2022.10.07 |
---|---|
[Spark] Spark Streaming - Twitter 해시태그 분석 (1) (0) | 2022.10.07 |
[Spark] 이벤트시간 윈도우, 워터마크 (0) | 2022.10.06 |
[Spark] Spark란 + 실습 (추가 정리) (0) | 2022.10.06 |
[Spark] Ubuntu 21.04에 Spark 설치하기 (0) | 2022.03.14 |