๐Ÿ“’ Spark(8)

Kimdongkiยท2024๋…„ 6์›” 19์ผ

Spark

๋ชฉ๋ก ๋ณด๊ธฐ
8/22

๐Ÿ“Œ Hive Meta Store

Spark DB & Table

  • ์นดํƒˆ๋กœ๊ทธ : ํ…Œ์ด๋ธ”๊ณผ ๋ทฐ์— ๊ด€ํ•œ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

    • ๊ธฐ๋ณธ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ์นดํƒˆ๋กœ๊ทธ ์ œ๊ณต -> ์„ธ์…˜์ด ๋๋‚˜๋ฉด ์‚ฌ๋ผ์ง„๋‹ค.
    • Hive์™€ ํ˜ธํ™˜๋˜๋Š” ์นดํƒˆ๋กœ๊ทธ ์ œ๊ณต -> Persistent
  • Table ๊ด€๋ฆฌ ๋ฐฉ์‹

    • ํ…Œ์ด๋ธ”๋“ค์€ DB๋ผ ๋ถ€๋ฅด๋Š” ํด๋”์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌ(2๋‹จ๊ณ„)

  • ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ Table & View -> ์ž„์‹œ ํ…Œ์ด๋ธ”

  • ์Šคํ† ๋ฆฌ์ง€ ๊ธฐ๋ฐ˜ ํ…Œ์ด๋ธ”

    • ๊ธฐ๋ณธ์ ์œผ๋กœ HDFS์™€ Parquet ํฌ๋งท์„ ์‚ฌ์šฉํ•œ๋‹ค.
    • Hive์™€ ํ˜ธํ™˜๋˜๋Š” ๋ฉ”ํƒ€์Šคํ† ์–ด ์‚ฌ์šฉ
    • ๋‘ ์ข…๋ฅ˜์˜ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•œ๋‹ค.(Hive์™€ ๋™์ผํ•œ ๊ฐœ๋…)
      • Managed Table
        -> Spark์ด ์‹ค์ œ ๋ฐ์ดํ„ฐ์™€ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ด€๋ฆฌํ•œ๋‹ค.
      • Unmanaged (External) Table
        -> Spark์ด ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋งŒ ๊ด€๋ฆฌํ•œ๋‹ค.

Spark SQL - ์Šคํ† ๋ฆฌ์ง€ ๊ธฐ๋ฐ˜ ์นดํƒˆ๋กœ๊ทธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  • Hive์™€ ํ˜ธํ™˜๋˜๋Š” ๋ฉ”ํƒ€ ์Šคํ† ์–ด ์‚ฌ์šฉ
  • SparkSession ์ƒ์„ฑ์‹œ enableHiveSupport()ํ˜ธ์ถœ
    -> ๊ธฐ๋ณธ์œผ๋กœ "default"๋ผ๋Š” ์ด๋ฆ„์˜ DB์ƒ์„ฑ
from pyspark.sql import SparkSession

spark = SparkSession \
	.builder \
    .appName("Python Spark Hive") \
    .enableHiveSupport() \
    .getOrCreate()

Spark SQL - Managed Table ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  • ๋‘ ๊ฐ€์ง€ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐฉ๋ฒ•

    • dataframe.saveAsTable("Table Name")
    • SQL ๋ฌธ๋ฒ• ์‚ฌ์šฉ(CREATE TABLE, CTAS)
  • spark.sql.warehouse.dir์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ๋‹ค.
    ->PARQUET์ด ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํฌ๋งท์ด๋‹ค.

  • ์„ ํ˜ธํ•˜๋Š” ํ…Œ์ด๋ธ” ํƒ€์ž…

  • SPARK ํ…Œ์ด๋ธ”๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์˜ ์žฅ์ (ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•  ๋•Œ)
    -> JDBC/ODBC๋“ฑ์œผ๋กœ Spark์„ ์—ฐ๊ฒฐํ•ด์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.(ํƒœ๋ธ”๋กœ, ํŒŒ์›ŒBI)

Spark SQL - External Table ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  • ์ด๋ฏธ HDFS์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ์Šคํ‚ค๋งˆ๋ฅผ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
    -> LOCATION์ด๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ์นดํƒˆ๋กœ๊ทธ์— ๊ธฐ๋ก๋œ๋‹ค.

    • ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค.
    • External Table์€ ์‚ญ์ œ๋˜์–ด๋„ ๋ฐ์ดํ„ฐ๋Š” ๊ทธ๋Œ€๋กœ์ด๋‹ค.
CREATE TABLE table_name(
	column1 type1,
    column2 type2,
    column3 type3
)
USING PARQUET
LOCATION 'hdfs_path';

๐Ÿ“Œ ์œ ๋‹› ํ…Œ์ŠคํŠธ

  • ์ฝ”๋“œ ์ƒ์˜ ํŠน์ • ๊ธฐ๋Šฅ (๋ณดํ†ต ๋ฉ”์†Œ๋“œ์˜ ํ˜•ํƒœ)์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋œ ์ฝ”๋“œ์ด๋‹ค.

  • ๋ณดํ†ต ์ •ํ•ด์ง„ ์ž…๋ ฅ์„ ์ฃผ๊ณ  ์˜ˆ์ƒ๋œ ์ถœ๋ ฅ์ด ๋‚˜์˜ค๋Š”์ง€ ํ˜•ํƒœ๋กœ ํ…Œ์ŠคํŠธํ•œ๋‹ค.

  • CI/CD๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ „์ฒด ์ฝ”๋“œ์˜ ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋Ÿฌ์ง€๊ฐ€ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•ด์ง„๋‹ค.

  • ๊ฐ ์–ธ์–ด๋ณ„๋กœ ์ •ํ•ด์ง„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

    • JUnit for Java
    • NUnit for .NET
    • unittest for Python

0๊ฐœ์˜ ๋Œ“๊ธ€