Colab으로 AWS S3연결하여 Spark작업하기

2023. 5. 11. 00:34· #️⃣ Data Engineering/Spark
목차
  1. 01. S3 버킷 권한 설정 
  2. 02. Colab 환경 구축 및 실행 

제곧내

 

데이터 적재를 EC2를 통해 S3까지 성공했지만, 금전적인 문제로 Spark 처리는 로컬로 하게 되었다😂

코랩에서 Spark를 사용하여 S3의 json 파일을 읽어오고자 한다. 

 

01. S3 버킷 권한 설정 

 

이를 위해서는 먼저 S3의 권한을 public으로 변경해야만 한다. 

권한 설정은 따로 글로 정리해두었다
"S3버킷 권한 설정 :
 https://hyem207.tistory.com/90

 

[AWS S3 오류] Forbidden (Service: Amazon S3; Status Code: 403; Error Code: 403 Forbidden;

사건 설명 외부(Colab)에서 s3 객체를 불러오고 싶었는데, 다음과 같은 오류가 떴다. getFileStatus on s3a://(버킷명/(불러올파일).json: com.amazonaws.services.s3.model.AmazonS3Exception: Forbidden (Service: Amazon S3; Status

hyem207.tistory.com

 

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
  1. 01. S3 버킷 권한 설정 
  2. 02. Colab 환경 구축 및 실행 
'#️⃣ Data Engineering/Spark' 카테고리의 다른 글
  • [Spark] Spark Streaming - Twitter 해시태그 분석 (2)
  • [Spark] Spark Streaming - Twitter 해시태그 분석 (1)
  • [Spark] 이벤트시간 윈도우, 워터마크
  • [Spark] Spark란 + 실습 (추가 정리)
HyeM207
HyeM207
"Reflections and Growth Through Records" 회고와 기록을 통한 성장으로
HYEM's Storage"Reflections and Growth Through Records" 회고와 기록을 통한 성장으로
HyeM207
HYEM's Storage
HyeM207
  • ALL (115)
    • #️⃣ CS (Computer Science) (5)
      • Database (2)
      • SQL (2)
      • Git (1)
    • #️⃣ Data Engineering (43)
      • Airflow (18)
      • Spark (8)
      • Snowflake (2)
      • BI,DashBoard (4)
      • ELK Stack (2)
      • Hadoop (5)
      • Kafka (4)
    • #️⃣ Cloud&Container (16)
      • AWS (8)
      • GCP (1)
      • Docker (6)
      • Kubernetes (1)
    • #️⃣ Project 및 개발일지 (37)
      • Mini Project (5)
      • 개발일지 (9)
      • Algorithm 문제 풀이 (20)
    • #️⃣ 책 리뷰 (4)
    • #️⃣ 회고글&프로젝트 후기 (10)

공지사항

인기 글

최근 댓글

블로그 메뉴

  • 홈
  • 태그
  • 방명록
hELLO · Designed By 정상우.v4.2.2
HyeM207
Colab으로 AWS S3연결하여 Spark작업하기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.