[Spark/Hive] Spark에서 Hive 메타 스토어 사용하기

2024. 12. 2. 15:30·Minding's Programming/Spark
728x90
반응형

Spark의 DB와 테이블

SparkSQL을 통해 임시 테이블을 만들어 SQL 조작이 가능하지만, Spark는 기본적으로 인메모리 기반이기 때문에, 세션이 종료되면 카탈로그라고 불리는 테이블과 뷰가 사라진다. 이 문제로 인해 Spark에서는 계속해서 사용해야 하는 테이블을 그때 그때 불러와줘야 하는 문제가 발생한다.

 

Hive 메타스토어

이를 해결하기 위해 Disk에 저장이 가능한 Hive와 호환이 되는 Persistent라는 카탈로그를 제공한다. 각 테이블들은 DB라고 부르는 폴더와 같은 구조로 관리된다.

 

위와 같이 스토리지 기반의 테이블은 기본적으로 HDFS오 Parquet 포맷을 사용하며, Hive와 호환되는 메타스토어를 사용한다. 여기엔 두 종류의 테이블이 존재한다.

  • Managed Table: Spark에서 실제 데이터와 메타 데이터 모두 관리
  • Unmanaged (External) Table: Spark에서 메타 데이터만 관리

 

스토리지 기반 카탈로그 사용 방법

Hive와 호환되는 메타스토어를 사용하기 위해서는, SparkSession을 생성할 때 enableHiveSupport()라는 함수를 호출할 수 있다. 기본으로 'default'라는 이름의 데이터베이스(폴더)가 생성된다.

from pyspark.sql import SparkSession
spark = SparkSession \
   .builder \
   .appName("Python Spark Hive") \
   .enableHiveSupport() \
   .getOrCreate()

 

Managed Table 사용방법

2가지 방법을 통해 테이블을 생성하고, 이 테이블이 저장될 위치를 가리키면 해당 위치에 저장된다. 기본 데이터 포맷은 parquet이다. 태블로나 PowerBi 등 외부에서도 Spark 테이블을 통해 처리하면 JDBC/ODBC등으로 Spark에 연결해 처리할 수 있다는 장점도 있다. 일반적으로 External Table보다 Managed Table로 처리하는 것이 성능이 우수하다.

# 테이블 생성(.saveAsTable() 또는 SQL의 CREATE 사용)
dataframe.saveAsTable("TableName")

# spark.sql.warehouse.dir("저장할위치")

 

External Table 사용방법

이미 HDFS에 존재하는 데이터에 스키마를 정의해서 사용하는 방법이다. LOCATION이라는 프로퍼티를 사용하고, 이 경우 실제 데이터는 제외한 메타데이터만 Spark 카탈로그에 기록된다.

CREATE TABLE table_name (
    column1 type1,
    column2 type2,
    column3 type3,
    …
 )
 USING PARQUET
 LOCATION 'hdfs_path';

 

728x90

'Minding's Programming > Spark' 카테고리의 다른 글

[Spark/pySpark] SparkSQL UDF(User Define Function)  (0) 2024.12.02
[Spark] Spark의 개념, 구조, 프로그램 실행 옵션  (2) 2024.11.28
[Hadoop] MapReduce 프로그래밍이란?  (0) 2024.11.28
[Hadoop] 하둡의 분산처리 시스템, YARN 개념 정리  (0) 2024.11.28
'Minding's Programming/Spark' 카테고리의 다른 글
  • [Spark/pySpark] SparkSQL UDF(User Define Function)
  • [Spark] Spark의 개념, 구조, 프로그램 실행 옵션
  • [Hadoop] MapReduce 프로그래밍이란?
  • [Hadoop] 하둡의 분산처리 시스템, YARN 개념 정리
Minding
Minding
  • Minding
    Today's Minding
    Minding
  • 전체
    오늘
    어제
    • 울고넘는 딥러닝 (278)
      • Minding's Baseball (57)
        • MLB Statcast (29)
        • 머신러닝으로 홈런왕 예측하기 (3)
        • 야구칼럼 (12)
        • 야구 규칙, 용어 (1)
        • 2022-23 질롱 코리아 (8)
        • 류현진 등판경기 (4)
      • Minding's Programming (185)
        • 프로그래머스 코딩테스트 (21)
        • Knowledge (44)
        • Numpy & Pandas (6)
        • Excel (3)
        • Git (1)
        • Pygame (11)
        • CV (3)
        • Tensorflow tutorial (4)
        • Kaggle and Dacon (4)
        • 에러 코드 (8)
        • FastAPI (8)
        • Airflow (29)
        • Crawling (6)
        • Django (14)
        • AWS (18)
        • Spark (5)
      • Minding's Reading (30)
        • 머신러닝 딥러닝에 필요한 기초 수학 with 파이.. (2)
        • 칼만필터는 어렵지 않아 (11)
        • 밑바닥부터 시작하는 딥러닝 (6)
        • 메이저리그 야구 통계학 2e (8)
        • 논문읽기 (2)
        • 빅데이터를 지탱하는 기술 (1)
      • Minding's Life (5)
        • 주식 (4)
        • 각종 소식 (1)
  • 블로그 메뉴

    • 홈
    • Baseball
    • Programming
    • Reading
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이게임
    프로그래머스
    에어플로우
    질롱코리아
    데이터분석
    KalmanFilter
    MLB
    게임개발
    KBO
    pygame
    데이터 엔지니어
    칼만필터는어렵지않아파이썬
    파이썬게임개발
    django python
    FastAPI
    메이저리그
    Python
    칼만필터
    파이썬
    코딩테스트
    Airflow
    AWS
    django
    머신러닝
    칼만필터는어렵지않아python
    칼만필터는어렵지않아
    넘파이
    딥러닝
    야구
    mlb stats api
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minding
[Spark/Hive] Spark에서 Hive 메타 스토어 사용하기
상단으로

티스토리툴바