Apache Iceberg به سرعت به استاندارد فرمتهای جدول باز در اکوسیستم بزرگ داده تبدیل شده است. با ارائه تراکنشهای ACID، تکامل اسکیما و نسخهبندی مستقیماً روی دریاچههای داده، Iceberg شکاف بین انعطافپذیری دریاچه داده و قابلیت اطمینان انبار داده را پر میکند. با این حال، شروع کار با Iceberg میتواند به دلیل اجزای مختلف و وابستگیهای درگیر، گیجکننده باشد.
این راهنما یک مرور جامع برای توسعهدهندگان سطح متوسط و پیشرفته ارائه میدهد که چگونه Apache Iceberg را با استفاده از Apache Spark، یکی از رایجترین موتورهای پردازش جداول Iceberg، نصب و پیکربندی کنند. ما پیشنیازها، نصب وابستگیها و ایجاد اولین جدول را پوشش خواهیم داد.
پیشنیازها و راهاندازی محیط
قبل از ورود به نصب، اطمینان حاصل کنید که محیط شما نیازمندیهای زیر را برآورده میکند:
- JDK 1.8 یا بالاتر: Iceberg از Java 8+ پشتیبانی میکند، اما Java 11 یا 17 برای عملکرد توصیه میشود.
- Apache Spark 3.x: ما در این مثال از Spark 3.3+ استفاده خواهیم کرد، زیرا یکپارچگی بومی بهتری با Iceberg دارد.
- یک سیستم فایل سازگار: سیستم فایل محلی برای توسعه، یا S3/GCS/HDFS برای تولید.
- Maven یا Gradle: برای مدیریت وابستگیها در یک پروژه Java/Scala.
افزودن وابستگیهای Iceberg
اولین گام در نصب Iceberg، افزودن کتابخانههای ضروری به پروژه شماست. Iceberg ماژولار است، بنابراین شما به کتابخانه اصلی و کتابخانه یکپارچگی موتور خاص (در این مورد، Spark) نیاز دارید.
در زیر تکهای از pom.xml برای Maven آمده است. توجه کنید که نسخه 1.2.0 است؛ شما باید برای آخرین نسخه پایدار به صفحه رسمی انتشار مراجعه کنید.
<dependency>
<groupId>org.apache.iceberg</groupId>
<artifactId>iceberg-core</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.iceberg</groupId>
<artifactId>iceberg-spark-runtime-3.3_2.12</artifactId>
<version>1.2.0</version>
</dependency>
نکته مهم در مورد Shading: آرتیفکت iceberg-spark-runtime shaded است، به این معنی که وابستگیهای داخلی را برای جلوگیری از تعارض با کتابخانههای موجود Spark شما بازبستهبندی میکند. این روش توصیه شده برای برنامههای Spark است.
پیکربندی نشست Spark
پس از افزودن وابستگیها، باید نشست Spark را پیکربندی کنید تا کاتالوگ Iceberg را شناسایی کند. Iceberg از چندین کاتالوگ، از جمله hive، jdbc، rest و hadoop پشتیبانی میکند. برای سادگی و تست محلی، ما از HadoopCatalog استفاده خواهیم کرد که متادیتا را در خود سیستم فایل ذخیره میکند.
در اینجا یک مثال Scala برای پیکربندی نشست Spark آمده است:
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.execution.datasources.v2.V2SessionCatalog
val spark = SparkSession.builder()
.appName("IcebergInstallationGuide")
.master("local[*]")
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions")
.config("spark.sql.catalog.iceberg", "org.apache.iceberg.spark.SparkCatalog")
.config("spark.sql.catalog.iceberg.type", "hadoop")
.config("spark.sql.catalog.iceberg.warehouse", "/tmp/iceberg-warehouse")
.getOrCreate()
توضیح پیکربندیهای کلیدی:
spark.sql.extensions: گسترشهای SQL خاص Iceberg را ثبت میکند.spark.sql.catalog.iceberg: یک کاتالوگ با نام "iceberg" را تعریف میکند.spark.sql.catalog.iceberg.type: پیادهسازی کاتالوگ را مشخص میکند.hadoopبرای توسعه محلی سادهترین است. برای تولید، ازhiveیاrestاستفاده کنید.spark.sql.catalog.iceberg.warehouse: دایرکتوری ریشهای که دادههای جدول و متادیتا در آن ذخیره میشوند.
ایجاد و پرسوجوی اولین جدول Iceberg شما
با پیکربندی کاتالوگ، اکنون میتوانید یک جدول Iceberg ایجاد کنید. بیایید یک جدول ساده به نام user_events در یک فضای نام به نام analytics ایجاد کنیم.
import org.apache.spark.sql.functions._
// Create namespace
spark.sql("CREATE NAMESPACE IF NOT EXISTS iceberg.analytics")
// Create table
spark.sql("""
CREATE TABLE IF NOT EXISTS iceberg.analytics.user_events (
id INT,
name STRING,
action STRING,
timestamp TIMESTAMP
)
USING ICEBERG
""")
// Insert sample data
val data = spark.createDataFrame(Seq(
(1, "Alice", "login", "2023-10-27 10:00:00".toTimestamp),
(2, "Bob", "purchase", "2023-10-27 10:05:00".toTimestamp)
)).toDF("id", "name", "action", "timestamp")
data.writeTo("iceberg.analytics.user_events").append()
// Query the table
spark.sql("SELECT * FROM iceberg.analytics.user_events").show()
تأیید و بهترین روشها
پس از اجرای کد بالا، باید دادههای نمونه را در کنسول ببینید. برای تأیید موفقیتآمیز بودن نصب، سیستم فایل را در /tmp/iceberg-warehouse/analytics/user_events بررسی کنید. باید دایرکتوریهایی برای داده، متادیتا و اسنپشاتها را ببینید.
بهترین روشها برای تولید:
- استفاده از یک Metastore: در حالی که کاتالوگ
hadoopبرای تست مناسب است، در تولید از Hive Metastore یا یک کاتالوگ REST برای پشتیبانی از چند موتور و مدیریت متادیتا استفاده کنید. - فرکانس Commit: Commitها در Iceberg میتوانند پرهزینه باشند. نوشتارهای خود را دستهبندی کنید تا تعداد اسنپشاتهای ایجاد شده کاهش یابد.
- انقضای اسنپشات: سیاستهای انقضای اسنپشات را برای مدیریت هزینههای ذخیرهسازی پیکربندی کنید. اسنپشاتهای قدیمی فضای دیسک را اشغال میکنند تا زمانی که به طور صریح حذف شوند.
نتیجهگیری
نصب Apache Iceberg یک فرآیند ساده است به محض اینکه سیستم کاتالوگ و مدیریت وابستگیها را درک کنید. با استفاده از آرتیفکتهای shaded runtime و پیکربندی صحیح نشست Spark، میتوانید به سرعت شروع به ساخت پایپلاینهای داده قابل اعتماد و مطابق با ACID روی دریاچه داده موجود خود کنید. هنگام حرکت به سمت تولید، در نظر بگیرید که از کاتالوگ Hadoop به کاتالوگهای Hive یا REST مهاجرت کنید تا ویژگیهای پیشرفتهای مانند دسترسی همزمان و مدیریت متمرکز متادیتا را آزاد کنید.