[Spark] Spark로 Google Cloud Storage 데이터 읽어오기!

NewNewDaddy·2025년 1월 2일
1

SPARK

목록 보기
18/18
post-thumbnail

0. INTRO

  • 대규모 데이터를 클라우드 객체 저장소에 보관한 뒤 Spark를 활용해 분석하는 방식은 이제 데이터 분석의 대표적인 사례로 자리 잡았습니다. 특히, 클라우드 서비스 환경에서는 Spark와 객체 저장소 간의 통합이 이미 기본적으로 설정된 경우가 많아, 별다른 추가 설정 없이 바로 사용할 수 있는 편리함이 있습니다.
  • 그러나 로컬 환경에서 Spark를 사용하거나, 특정 클라우드 환경과의 통합이 자동화되지 않은 상황이라면 객체 저장소와 Spark 간의 연동 방식과 필요한 설정 사항에 대한 고민이 필요합니다.
  • 이번 글에서는 로컬의 Spark 환경에서 Google Cloud Storage에 저장된 데이터를 어떻게 읽어올 수 있는지 다뤄보겠습니다.(생각보다 간단합니다.)

1. 관련 파일 다운로드

1) 서비스 계정 API KEY 생성

  • GCS에 저장된 데이터를 읽기 위해서는 해당 클라우드 사용자 인증이 필요합니다. 따라서 'Storage Admin' 권한이 추가된 서비스 계정 생성 후 해당 서비스 계정의 API KEY를 다운받아야 합니다.
  • 서비스 계정 생성 및 권한 부여, API KEY 생성 관련해서는 [GCP] Google Cloud IAM 권한 설정 기초 및 실습 이 글에서 상세히 다루고 있으므로 참고하시면 됩니다.

2) gcs-connector 다운로드

  • 이번에 다운로드할 파일은 GCS와 Apache Hadoop 기반의 도구들간의 통합을 가능하게 해주는 커넥터 파일입니다.
  • 이 파일을 기반으로 GCS를 HDFS처럼 사용할 수 있어 Spark에서 GCS에 저장된 데이터를 읽어올 수 있는 것입니다.
  • gcs-connector 링크에 들어가서 'gcs-connector-hadoop3-2.2.9-shaded.jar' 파일을 다운 받습니다.(가장 다운로드 수가 많다.)

2. 연동 설정

  • 위 두 파일(API KEY, GCS-connector)을 모두 다운받았으면 이제 거의 다 왔습니다. 해당 파일들을 특정 경로에 저장해놓은 후 spark session 시작시 config에 명시해주기만 하면 연동이 완료됩니다.
  • 그 전에 먼저 필요 라이브러리들 부터 설치합니다.

    pip install pyspark gcsfs

from pyspark.sql import SparkSession

spark = (
    SparkSession.builder
    .appName("pyspark-gcs-connection")
    .master("local[*]")
    .config("spark.jars", "[gcs-connector-hadoop3-2.2.9-shaded.jar 파일 경로]")
    .config("spark.hadoop.fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem")
    .config("spark.hadoop.google.cloud.auth.service.account.enable", "true")
    .config("spark.hadoop.google.cloud.auth.service.account.json.keyfile", "[서비스 계정 API KEY json 파일 경로]")
    .getOrCreate()
    )
    
df = spark.read.parquet("[GCS gsutil URI 주소]")
						# gs://newnew_daddy/dataset/emp.parquet

3. OUTRO

  • 이번 글에서는 GCS에 저장된 데이터를 로컬 spark 환경에서 읽어올 수 있도록 설정하는 과정을 다뤄보았습니다.
  • AWS S3의 경우 "Spark와 hadoop-aws 호환 버전에 따른 AWS S3와 통신할 수 있는 Spark Jupyter Lab Docker Image 구성하기" 글에서 간접적으로 다루었었는데 생각보다 버전 호환성이 까다롭고 더 많은 파일과 설정을 필요로 했었습니다.
  • 하지만 GCS의 경우 실질적으로 연동을 담당하는 파일 하나(.jar 파일), 데이터에 대한 접근 권한을 담당하는 파일 하나(.json 파일) 이렇게 두 가지만 필요로 했고, pyspark 설정도 많지 않아 생각보다 간단히 연동이 가능했습니다.
  • 물론 Google Cloud의 Hadoop Cluster 서비스인 Google Dataproc를 사용하면 이미 설정이 완료된 jupyter notebook 환경을 제공해주지만 간단한 분석을 위해 사용하기엔 서비스가 쫌 무겁고, 과금도 된다는 단점이 있습니다.
  • 위의 방법을 활용하면 로컬 혹은 Docker 환경에서도 GCS 접근이 가능하므로 더 효율적인 데이터 분석이 될 것이라 생각합니다.
profile
데이터 엔지니어의 작업공간 / #PYTHON #CLOUD #SPARK #AWS #GCP #NCLOUD

0개의 댓글