במאמר הזה מוסבר איך להעביר מטא-נתונים משירות Dataproc Metastore לנקודת קצה של קטלוג Apache Iceberg REST או לנקודת קצה של קטלוג Hive, שמבוססות על Lakehouse ללא גבולות.
תרחישים לדוגמה
- מודרניזציה ללא שרת: מעבר מ-Hive Metastore (HMS) רגיל לקטלוג מנוהל עם יכולת הרחבה אוטומטית, שמבטל את התקורה התפעולית של ניהול metastore.
- שיתוף פעולה בין מנועים: אפשר לשתף נתונים בין מנועים – כולל Apache Spark, Apache Flink, Apache Hive ו-BigQuery – כדי שמדעני נתונים ואנליסטים יוכלו לעבוד על אותם טבלאות בו-זמנית בלי לשכפל קבצים.
- שילוב ישיר עם BigQuery: אפשר להריץ שאילתות על טבלאות בקוד פתוח ישירות מ-BigQuery עם ביצועים גבוהים.
- ניהול מאוחד: איחוד המטא-נתונים למקור אמת יחיד, כדי לפשט את גילוי הנתונים ולאכוף מדיניות באופן עקבי.
- פורמטים מודרניים של טבלאות: אפשר להשתמש בפורמטים מתקדמים של קוד פתוח כמו Apache Iceberg בצורה חלקה, תוך שמירה על תאימות מלאה לעומסי העבודה הקיימים ב-Hive.
לפני שמתחילים
- מוודאים שקיים שירות פעיל של Dataproc Metastore כמקור ההעברה.
- מוודאים שקטלוג Hive או קטלוג Iceberg של היעד קיימים וכוללים את הקטגוריות או הנתיבים ב-Cloud Storage שבהם נמצאים נתוני טבלת המקור והמטא-נתונים שלה (לדוגמה, קטגוריית מחסן הנתונים של Dataproc Metastore, כמו
gs://gcs-your-project-name-0825d7b3-0627-4637-8fd0-cc6271d00eb4/hive-warehouse).אם קטלוג היעד לא כולל את מיקום הנתונים, העברת הטבלה נכשלת כי קטלוג היעד לא יכול לרשום את הטבלאות. למידע על יצירת קטלוג Iceberg, ראו הגדרת נקודת הקצה של קטלוג REST של Iceberg.
במאמר יצירת קטלוג Hive של Lakehouse מוסבר איך ליצור קטלוג Hive. - נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Lakehouse for Apache Iceberg, Dataproc Metastore APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Verify that billing is enabled for your Google Cloud project.
Enable the Lakehouse for Apache Iceberg, Dataproc Metastore APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
התפקידים הנדרשים
כדי לקבל את ההרשאות שנדרשות להפעלת ההעברה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בשירות Dataproc Metastore:
-
מתחילים את ההעברה:
עורך של Dataproc Metastore (
roles/metastore.editor) -
יצירת קטלוגים של Hive או Iceberg:
אדמין BigLake (
roles/biglake.admin) -
העברת מטא-נתונים לקטלוגים של יעד באמצעות פרויקט יעד:
אדמין BigLake (
roles/biglake.admin) בסוכן השירות של Dataproc Metastore (service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com). -
כתיבת דוחות העברה לקטגוריית הדוחות (אם לא משתמשים בקטגוריית ארטיפקטים של השירות):
אדמין של אובייקט אחסון (
roles/storage.objectAdmin) בסוכן של חשבון שירות ב-Dataproc Metastore (service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
איך מתבצעת העברה
תהליך ההעברה פועל באופן הבא:
- בחירת קטלוג היעד: בוחרים את נקודת הקצה של קטלוג Hive או את נקודת הקצה של קטלוג Apache Iceberg REST להעברה.
- הפעלת ההעברה: מריצים את הפקודה
gcloud beta metastore services migrations startאו קוראים לשיטהstartMigrationבשירות Dataproc Metastore כדי להתחיל את ההעברה. - בדיקת הסטטוס: כדי לעקוב אחרי התקדמות ההעברה, משתמשים בפקודה
gcloud beta metastore services migrations describeאו בודקים את הביצוע של יעד. - עיון בדוחות: כדי לאמת את התוצאות, מעיינים בדוחות ה-JSON המפורטים שנכתבו בנתיב Cloud Storage שצוין.
הפעלת העברה
כדי להפעיל מיגרציה, מפעילים את תהליך המיגרציה ועוקבים אחרי ההתקדמות שלו.
התחלת ההעברה
כדי להפעיל את העברת המטא-נתונים בשירות Dataproc Metastore, משתמשים ב-gcloud CLI או ב-API בארכיטקטורת REST.
gcloud
כדי להתחיל את ההעברה באמצעות gcloud, מריצים את הפקודה gcloud beta metastore
services migrations
start:
gcloud beta metastore services migrations start SERVICE_ID \
--location=REGION \
--hive-catalog="projects/PROJECT_ID/catalogs/HIVE_CATALOG_ID" \
--hive-databases="HIVE_DB_1,HIVE_DB_2" \
--iceberg-catalog="projects/PROJECT_ID/catalogs/ICEBERG_CATALOG_ID" \
--iceberg-namespaces="ICEBERG_NAMESPACE_1,ICEBERG_NAMESPACE_2" \
--async
מחליפים את מה שכתוב בשדות הבאים:
-
SERVICE_ID: המזהה של שירות Dataproc Metastore -
REGION: האזור של שירות Dataproc Metastore -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
HIVE_CATALOG_ID: מזהה קטלוג Hive של היעד -
HIVE_DB_1, HIVE_DB_2: מסדי הנתונים של Hive שרוצים להעביר. -
ICEBERG_CATALOG_ID: מזהה קטלוג היעד של Iceberg -
ICEBERG_NAMESPACE_1,ICEBERG_NAMESPACE_2: מרחבי השמות של Iceberg שרוצים להעביר.
REST
כדי להפעיל את העברת המטא-נתונים באמצעות API בארכיטקטורת REST, מפעילים את ה-method startMigration עם הגדרה של BigLakeMetastoreMigrationConfig:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"migrationExecution": {
"biglakeMetastoreMigrationConfig": {
"mode": "BACKFILL",
"dryRun": false,
"reportPath": "gs://BUCKET_NAME/PATH/",
"conflictPolicy": "SKIP",
"hiveConfig": {
"catalog": "projects/PROJECT_ID/catalogs/HIVE_CATALOG_ID",
"databases": ["HIVE_DB_1", "HIVE_DB_2"]
},
"icebergConfig": {
"catalog": "projects/PROJECT_ID/catalogs/ICEBERG_CATALOG_ID",
"namespaces": ["ICEBERG_NAMESPACE_1", "ICEBERG_NAMESPACE_2"]
}
}
}
}' \
"https://metastore.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION/services/SERVICE_ID:startMigration"
מחליפים את מה שכתוב בשדות הבאים:
-
BUCKET_NAME: השם של קטגוריית Cloud Storage לדוחות -
PATH: הנתיב בדלי לדוחות -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
HIVE_CATALOG_ID: מזהה קטלוג Hive של היעד -
HIVE_DB_1, HIVE_DB_2: מסדי הנתונים של Hive שרוצים להעביר. -
ICEBERG_CATALOG_ID: מזהה קטלוג היעד של Iceberg -
ICEBERG_NAMESPACE_1,ICEBERG_NAMESPACE_2: מרחבי השמות של Iceberg שרוצים להעביר. -
REGION: האזור של שירות Dataproc Metastore -
SERVICE_ID: המזהה של שירות Dataproc Metastore
בדיקה חוזרת של ביצוע ההעברה
הבקשה מתחילה פעולה ממושכת (LRO) ומחזירה מזהה ייחודי של ביצוע ההעברה. אפשר לעקוב אחרי ההתקדמות של ההרצה באמצעות gcloud CLI או API בארכיטקטורת REST:
gcloud
כדי לתאר את ביצוע ההעברה באמצעות gcloud, מריצים את הפקודה gcloud beta
metastore services migrations
describe:
gcloud beta metastore services migrations describe MIGRATION_EXECUTION_ID \
--service=SERVICE_ID \
--location=REGION
מחליפים את מה שכתוב בשדות הבאים:
-
MIGRATION_EXECUTION_ID: המזהה של ביצוע ההעברה שהוחזר בשלב הקודם -
SERVICE_ID: המזהה של שירות Dataproc Metastore -
REGION: האזור של שירות Dataproc Metastore
REST
כדי לעקוב אחר התקדמות ההרצה באמצעות API בארכיטקטורת REST, קוראים ל-method get בנתיב הביצוע הזה:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://metastore.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION/services/SERVICE_ID/migrationExecutions/MIGRATION_EXECUTION_ID"
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud -
REGION: האזור של שירות Dataproc Metastore -
SERVICE_ID: המזהה של שירות Dataproc Metastore -
MIGRATION_EXECUTION_ID: המזהה של ביצוע ההעברה שהוחזר בשלב הקודם
דוח מפורט של ההעברה
אחרי שההעברה (backfill או הרצה יבשה) מסתיימת, כלי ההעברה כותב שני קובצי דוחות מפורטים בפורמט JSON על סמך סכימת MigrationReport לנתיב היעד ב-Cloud Storage שצוין ב-reportPath:
-
summary.json: מכיל את המבנה המצטבר ברמה הגבוההMigrationSummary. -
full_report.json: מכיל דוח העברה מפורט יותר. מידע נוסף זמין במאמרCatalogReport.
מגבלות
- קטלוג היעד צריך לכלול את הקטגוריות או הנתיבים ב-Cloud Storage שבהם נמצאים נתוני טבלת המקור והמטא-נתונים שלה (למשל קטגוריית מחסן הנתונים של Dataproc Metastore). אם קטלוג היעד לא מוגדר עם מיקום של מאגר נתונים, אי אפשר לרשום את הטבלאות בקטלוג היעד והעברת הטבלאות נכשלת.
- הכלי תומך רק במילוי חוסרים חד-פעמי. שינויים במטא-נתונים של Dataproc Metastore במקור אחרי ההעברה לא מועברים באופן אוטומטי. כדי לסנכרן את קטלוג היעד עם המקור, צריך להריץ מחדש את ההעברה.
- ההעברה מוגבלת על ידי הקטלוגים של היעד. אם טבלה ב-Dataproc Metastore מכילה מבנה סכימה או מאפיין שלא נתמכים בקטלוג היעד (למשל סוגים מורכבים), ההעברה של הטבלה הספציפית הזו תיכשל.
- ההרשאות של Dataproc Metastore לטבלאות או למסדי נתונים לא מועברות ל-Lakehouse.
המאמרים הבאים
- מידע נוסף על קטלוג זמן הריצה של Lakehouse
- איך מגדירים את Spark ו-Hive באמצעות קטלוג זמן הריצה של Lakehouse
- איך שולחים שאילתות לטבלאות Iceberg באמצעות קטלוג של Lakehouse runtime, Spark ו-BigQuery