Apache Iceberg 및 Apache Spark와 함께 Google 클라우드에 현대 데이터 레이크 하우스 구축

Apache Iceberg 및 Apache Spark와 함께 Google 클라우드에 현대 데이터 레이크 하우스 구축

스폰서 콘텐츠

Apache Iceberg 및 Apache Spark와 함께 Google 클라우드에 현대 데이터 레이크 하우스 구축Apache Iceberg 및 Apache Spark와 함께 Google 클라우드에 현대 데이터 레이크 하우스 구축

빅 데이터 분석의 환경은 끊임없이 발전하고 있으며, 조직은보다 유연하고 확장 가능하며 비용 효율적인 방법을 찾고 있으며 방대한 양의 데이터를 관리하고 분석합니다. 이러한 추구는 데이터 호수의 저렴한 저장 및 유연성과 데이터 관리 기능 및 데이터웨어 하우스의 트랜잭션 일관성을 결합한 데이터 레이크 하우스 패러다임의 상승으로 이어졌습니다. 이 혁명의 핵심에는 Apache Iceberg 및 Apache Spark와 같은 강력한 가공 엔진과 같은 오픈 테이블 형식이 있으며, 모두 Google Cloud의 강력한 인프라에 힘 입어 있습니다.

Apache Iceberg의 Rise : Data Lakes의 게임 체인저

수년 동안 GCS (Google Cloud Storage)와 같은 클라우드 객체 스토리지를 기반으로하는 Data Lakes는 비교할 수없는 확장 성과 비용 효율성을 제공했습니다. 그러나 트랜잭션 일관성, 스키마 진화 및 분석 쿼리를위한 성능 최적화와 같은 전통적인 데이터웨어 하우스에서 발견되는 중요한 기능이 부족했습니다. 아파치 빙산이 빛나는 곳입니다.

Apache Iceberg는 이러한 제한 사항을 해결하도록 설계된 오픈 테이블 형식입니다. 클라우드 스토리지의 데이터 파일 (Parquet, Orc 또는 Avro 등) 위에 위치하여 파일 모음을 고성능 SQL 유사 테이블로 변환하는 메타 데이터 계층을 제공합니다. 빙산을 강력하게 만드는 이유는 다음과 같습니다.

  • 산성 준수 : 빙산은 데이터 호수에 원자력, 일관성, 분리 및 내구성 (산) 특성을 제공합니다. 이는 데이터 쓰기가 트랜잭션이라는 것을 의미하며 동시 작업에도 데이터 무결성을 보장합니다. 더 이상 부분적인 글이나 일관성없는 읽기가 없습니다.
  • 스키마 진화 : 전통적인 데이터 호수에서 가장 큰 고통 중 하나는 스키마 변경을 관리하는 것입니다. 빙산은 스키마 진화를 원활하게 처리하여 기본 데이터를 다시 작성하지 않고 열을 추가, 삭제, 이름을 바꾸거나 재정렬 할 수 있습니다. 이것은 민첩한 데이터 개발에 중요합니다.
  • 숨겨진 파티셔닝 : 빙산은 지능적으로 분할을 관리하여 데이터의 물리적 레이아웃을 추상화합니다. 사용자는 더 이상 효율적인 쿼리를 작성하기 위해 분할 체계를 알 필요가 없으며 데이터 마이그레이션없이 시간이 지남에 따라 파티션 전략을 발전시킬 수 있습니다.
  • 시간 여행 및 롤백 : 빙산은 테이블 스냅 샷의 완전한 역사를 유지합니다. 이를 통해 “시간 여행”쿼리가 가능하여 과거의 어느 시점에서든 데이터가 존재하는대로 데이터를 쿼리 할 수 있습니다. 또한 롤백 기능을 제공하여 디버깅 및 데이터 복구에 귀중한 테이블을 이전의 좋은 상태로 되돌릴 수 있습니다.
  • 성능 최적화 : Iceberg의 풍부한 메타 데이터를 사용하면 쿼리 엔진이 관련없는 데이터 파일과 파티션을 효율적으로 잘라 쿼리 실행을 크게 가속화 할 수 있습니다. 메타 데이터를 기반으로 관련 데이터로 직접 이동하는 비용이 많이 드는 파일 목록 작업을 피합니다.

Apache Iceberg는 이러한 데이터웨어 하우스와 같은 기능을 데이터 레이크 위에 제공함으로써 실제 “데이터 레이크 하우스”를 생성 할 수있어 두 세계의 최고를 제공 할 수 있습니다. 구조화 된 테이블의 신뢰성 및 성능과 결합 된 클라우드 스토리지의 유연성과 비용 효율성을 제공합니다.

BigQuery에서 Apache Iceberg 용 Google Cloud의 Biglake 테이블은 표준 BigQuery 테이블과 유사한 완전 관리 테이블 경험을 제공하지만 모든 데이터는 고객 소유의 스토리지 버킷에 저장됩니다. 지원 기능은 다음과 같습니다.

  • GoogleSQL 데이터 조작 언어 (DML)를 통한 테이블 돌연변이
  • Spark와 같은 Biglake 커넥터를 통해 Storage Write API를 사용한 통합 배치 및 고 처리량 스트리밍
  • 빙산 V2 스냅 샷 내보내기 및 각 테이블 돌연변이의 자동 새로 고침
  • 열 메타 데이터를 업데이트하기위한 스키마 진화
  • 자동 스토리지 최적화
  • 과거 데이터 액세스를위한 시간 여행
  • 열 수준 보안 및 데이터 마스킹

다음은 GoogleSQL을 사용하여 빈 Biglake Iceberg 테이블을 만드는 방법의 예입니다.


SQL

CREATE TABLE PROJECT_ID.DATASET_ID.my_iceberg_table (
  name STRING,
  id INT64
)
WITH CONNECTION PROJECT_ID.REGION.CONNECTION_ID
OPTIONS (
file_format="PARQUET"
table_format="ICEBERG"
storage_uri = 'gs://BUCKET/PATH');

그런 다음 데이터를 사용하여 데이터로 가져올 수 있습니다 LOAD INTO 파일에서 데이터를 가져 오기 위해 또는 INSERT INTO 다른 테이블에서.


SQL

# Load from file
LOAD DATA INTO PROJECT_ID.DATASET_ID.my_iceberg_table
FROM FILES (
uris=['gs://bucket/path/to/data'],
format="PARQUET");

# Load from table
INSERT INTO PROJECT_ID.DATASET_ID.my_iceberg_table
SELECT name, id
FROM PROJECT_ID.DATASET_ID.source_table

완전히 관리되는 제품 외에도 Apache Iceberg는 BigQuery의 read-external 테이블로 지원됩니다. 이것을 사용하여 데이터 파일이있는 기존 경로를 가리 키십시오.


SQL

CREATE OR REPLACE EXTERNAL TABLE PROJECT_ID.DATASET_ID.my_external_iceberg_table
WITH CONNECTION PROJECT_ID.REGION.CONNECTION_ID
OPTIONS (
  format="ICEBERG",
  uris =
    ['gs://BUCKET/PATH/TO/DATA'],
  require_partition_filter = FALSE);

아파치 스파크 : 데이터 레이크 하우스 분석 엔진

Apache Iceberg는 Data Lakehouse의 구조 및 관리를 제공하지만 Apache Spark는이를 생생하게하는 가공 엔진입니다. Spark는 속도, 다양성 및 다양한 빅 데이터 워크로드를 처리 할 수있는 능력으로 유명한 강력한 오픈 소스, 분산 처리 시스템입니다. Spark의 메모리 내 처리, ML 및 SQL 기반 처리를 포함한 도구의 강력한 생태계 및 Deep Iceberg 지원은 훌륭한 선택입니다.

Apache Spark는 Google Cloud Ecosystem에 깊이 통합되었습니다. Google Cloud에서 Apache Spark 사용의 이점은 다음과 같습니다.

  • Apache Spark 용 Google Cloud Serverless를 사용하여 클러스터 관리없이 실제 서버리스 스파크 경험에 액세스하십시오.
  • DatAPROC를 통한 유연한 클러스터 구성 및 관리로 완전히 관리되는 스파크 경험.
  • Apache Spark Preview 기능을위한 새로운 Lightning Engine을 사용하여 Spark 작업을 가속화하십시오.
  • gpus 및 드라이버가 사전 설치로 런타임을 구성하십시오.
  • Xgboost, Pytorch 및 Transformers를 포함하여 Spark Runtimes에서 기본적으로 사용할 수있는 강력한 라이브러리 세트를 사용하여 AI/ML 작업을 실행하십시오.
  • Colab Enterprise Notebooks와 Gemini 기반 Pyspark 코드 생성을 통해 BigQuery Studio 내부에 직접 Pyspark 코드를 작성하십시오.
  • BigQuery Native Tables, Biglake Iceberg 테이블, 외부 테이블 및 GCS에서 데이터에 쉽게 연결
  • 엔드 투 엔드 MLOPS 용 Vertex AI와의 통합

빙산 + 스파크 : 함께 더 나은

Iceberg와 Spark는 함께 성능 및 신뢰할 수있는 데이터 호수를위한 강력한 조합을 형성합니다. Spark는 Iceberg의 메타 데이터를 활용하여 쿼리 계획을 최적화하고 효율적인 데이터 치기를 수행하며 데이터 레이크에서 트랜잭션 일관성을 보장 할 수 있습니다.

빙산 테이블과 BigQuery 기본 테이블은 Biglake Metastore를 통해 액세스 할 수 있습니다. 이렇게하면 스파크를 포함하여 BigQuery 호환성이있는 오픈 소스 엔진에 테이블이 노출됩니다.


Python

from pyspark.sql import SparkSession

# Create a spark session
spark = SparkSession.builder \
.appName("BigLake Metastore Iceberg") \
.config("spark.sql.catalog.CATALOG_NAME", "org.apache.iceberg.spark.SparkCatalog") \
.config("spark.sql.catalog.CATALOG_NAME.catalog-impl", "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog") \
.config("spark.sql.catalog.CATALOG_NAME.gcp_project", "PROJECT_ID") \
.config("spark.sql.catalog.CATALOG_NAME.gcp_location", "LOCATION") \
.config("spark.sql.catalog.CATALOG_NAME.warehouse", "WAREHOUSE_DIRECTORY") \
.getOrCreate()
spark.conf.set("viewsEnabled","true")

# Use the blms_catalog
spark.sql("USE `CATALOG_NAME`;")
spark.sql("USE NAMESPACE DATASET_NAME;")

# Configure spark for temp results
spark.sql("CREATE namespace if not exists MATERIALIZATION_NAMESPACE");
spark.conf.set("materializationDataset","MATERIALIZATION_NAMESPACE")

# List the tables in the dataset
df = spark.sql("SHOW TABLES;")
df.show();

# Query the tables
sql = """SELECT * FROM DATASET_NAME.TABLE_NAME"""
df = spark.read.format("bigquery").load(sql)
df.show()
sql = """SELECT * FROM DATASET_NAME.ICEBERG_TABLE_NAME"""
df = spark.read.format("bigquery").load(sql)
df.show()

sql = """SELECT * FROM DATASET_NAME.READONLY_ICEBERG_TABLE_NAME"""
df = spark.read.format("bigquery").load(sql)
df.show()

Biglake Metastore의 기능을 확장하는 것은 빙산 REST 카탈로그 (미리보기)로 모든 데이터 처리 엔진으로 빙산 데이터에 액세스 할 수 있습니다. Spark를 사용하여 연결하는 방법은 다음과 같습니다.


Python

import google.auth
from google.auth.transport.requests import Request
from google.oauth2 import service_account
import pyspark
from pyspark.context import SparkContext
from pyspark.sql import SparkSession

catalog = ""
spark = SparkSession.builder.appName("") \
    .config("spark.sql.defaultCatalog", catalog) \
    .config(f"spark.sql.catalog.{catalog}", "org.apache.iceberg.spark.SparkCatalog") \
    .config(f"spark.sql.catalog.{catalog}.type", "rest") \
    .config(f"spark.sql.catalog.{catalog}.uri",
" \
    .config(f"spark.sql.catalog.{catalog}.warehouse", "gs://") \
    .config(f"spark.sql.catalog.{catalog}.token", "") \
    .config(f"spark.sql.catalog.{catalog}.oauth2-server-uri", " \                   .config(f"spark.sql.catalog.{catalog}.header.x-goog-user-project", "") \     .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
.config(f"spark.sql.catalog.{catalog}.io-impl","org.apache.iceberg.hadoop.HadoopFileIO") \    .config(f"spark.sql.catalog.{catalog}.rest-metrics-reporting-enabled", "false") \
.getOrCreate()

Lakehouse를 완성합니다

Google Cloud는 Apache Iceberg 및 Apache Spark를 보완하는 포괄적 인 서비스를 제공하여 이미 사용중인 많은 오픈 소스 기술을 활용하면서 데이터 레이크 하우스를 쉽게 구축, 관리 및 확장 할 수 있습니다.

  • Dataplex Universal 카탈로그 : Dataplex Universal 카탈로그는 데이터 호수, 데이터웨어 하우스 및 데이터 마트를 통해 데이터를 관리, 모니터링 및 관리하기위한 통합 데이터 패브릭을 제공합니다. Biglake Metastore와 통합되어 빙산 테이블에 따라 거버넌스 정책이 지속적으로 시행되며 시맨틱 검색, 데이터 계보 및 데이터 품질 검사와 같은 기능을 가능하게합니다.
  • Apache Kafka의 Google Cloud 관리 서비스: Kafka Connect를 포함하여 Google Cloud에서 완전히 관리되는 Kafka 클러스터를 실행하십시오. 대기 시간이 낮은 읽기가 낮은 빙산 테이블을 포함하여 데이터 스트림은 BigQuery로 직접 읽을 수 있습니다.
  • 클라우드 작곡가 : Apache Airflow에 구축 된 완전히 관리되는 워크 플로 오케스트레이션 서비스.
  • 정점 AI : 정점 AI를 사용하여 전체 엔드 투 엔드 ML OPS 경험을 관리하십시오. 관리되는 JupyterLab 경험에 Vertex AI Workbench를 사용하여 서버리스 스파크 및 데이터 프로위 인스턴스에 연결할 수도 있습니다.

결론

Google Cloud의 Apache Iceberg와 Apache Spark의 조합은 현대적인 고성능 데이터 레이크 하우스를 구축하기위한 강력한 솔루션을 제공합니다. Iceberg는 역사적으로 데이터 호수에서 누락 된 트랜잭션 일관성, 스키마 진화 및 성능 최적화를 제공하는 반면 Spark는 이러한 대형 데이터 세트를 처리하기위한 다목적이고 확장 가능한 엔진을 제공합니다.

자세한 내용은 7 월 8 일 오전 11시 PST에서 무료 웹 세미나를 확인하여 Apache Spark 및 Google Cloud의 지원 도구를 더 깊이 파악할 수 있습니다.

저자 : Brad Miro, 수석 개발자 옹호자 -Google

출처 참조

Post Comment

당신은 놓쳤을 수도 있습니다