להתחיל עם Trino ו-Alluxio במשך חמש דקות

Trino הוא גרסה חופשית של מנוע חיפוש SQL מרובע המיועד לבדיקת קבצים גדולים של נתונים המפולגים על אחד או יותר מקורות נתונים שונים. Trino תוכנן לטפל באחסון נתונים, ETL, וניתוח אינטראקטיבי על ידי כמויות גדולות של נתונים וייצור דוחות.

Alluxio היא פלטפורמת ארגון נתונים חופשית לניתוח בקנה מידה גדול ו AI. Alluxio יושב בין ממשקים חישוב כגון Trino ו- Apache Spark לבין מערכות אחסון כגון Amazon S3, Google Cloud Storage, HDFS, ו- MinIO.

זהו מדריך לפרוסטורות Alluxio כשכבת מטמון עבור Trino באמצעות חיבור Iceberg.

למה אנו זקוקים למטמון עבור Trino?

A small fraction of the petabytes of data you store is generating business value at any given time. Repeatedly scanning the same data and transferring it over the network consumes time, compute cycles, and resources. This issue is compounded when pulling data from disparate Trino clusters across regions or clouds. In these circumstances, caching solutions can significantly reduce the latency and cost of your queries.

Trino כולל מנוע מטמון מקושר, Rubix, בחיבור ה- Hive שלו. בעוד שהמערכת זהירה כמו שהיא באה עם Trino, היא מוגבלת לחיבור ה- Hive ולא תוקנה מאז 2020. היא גם חסרת תכונות אבטחה ותמיכה במנועי חישוב נוספים.

Trino על Alluxio

Alluxio מחבר את Trino למערכות אחסון שונות, מספק APIs וממד מאוחד ליישומים מבוססי נתונים. Alluxio מאפשר לTrino לגשת לנתונים ללא קשר למקור הנתונים ולמטמון של נתונים שנגישו לעיתים קרובות (למשל, טבלאות שמשתמשים בהן) לתוך אחסון מרובע של Alluxio.

שימוש במטמון Alluxio באמצעות חיבור Iceberg מעל אחסון קבצים MinIO

יצרנו דגמה שמדגימה כיצד להגדיר את Alluxio להשתמש במטמון כתיבת דרך עם MinIO. זה מושג על ידי שימוש בחיבור Iceberg וביצוע שינוי יחיד לנושא המיקום בטבלה מנקודת המבט של Trino.

בדמות הדגמה זו, Alluxio פועל על שרתים נפרדים; עם זאת, מומלץ להריץ אותו על אותם צמתים כמו Trino. זה אומר שכל התצורות עבור Alluxio יהיו ממוקמות על השרתים בהם Alluxio פועל, בעוד שהתצורה של Trino נשארת ללא שינויים. היתרון של ריצת Alluxio בחוץ הוא שהוא לא יתחרה על משאבים עם Trino, אך החיסרון הוא שתצטרך להעביר נתונים מעל הרשת כאשר קוראים מתוך Alluxio. חיוני לביצועים שTrino ו-Alluxio יהיו באותה רשת.

כדי לעקוב אחר דגמה זו, העתק את הקוד הממוקם כאן.

תצורת Trino

Trino מותאם באופן זהה לתצורת Iceberg סטנדרטית. מאחר ש-Alluxio פועל מחוץ ל-Trino, התצורה היחידה הנדרשת היא בזמן שאילתה ולא בהתחלה.

תצורת Alluxio

כל ההגדרות עבור Alluxio יכולות להיקבע באמצעות קובץ ה-alluxio-site.properties. כדי לשמור על כל ההגדרות במקום על קובץ ה-docker-compose.yml, אנו מגדירים אותן באמצעות תכונות Java דרך משתנה הסביבה ALLUXIO_JAVA_OPTS. הדוגמה גם מתייחסת לצומת המאסטר כאל המנהיג ולעובדים כאל עוקבים.

הגדרות מאסטר

 
alluxio.master.mount.table.root.ufs=s3://alluxio/

המנהיג מחשף פורטים 19998 ו-19999, כאשר האחרון הוא הפורט לממשק האינטרנט.

הגדרות עובד

 

alluxio.worker.ramdisk.size=1G
alluxio.worker.hostname=alluxio-follower

העוקב מחשף פורטים 29999 ו-30000, ומקבע זיכרון משותף המשמש על ידי Alluxio לאחסון נתונים. זהו מוגדר כ-1G דרך תכונת ה-shm_size ומוזכר מתכונת alluxio.worker.ramdisk.size.

הגדרות משותפות בין המנהיג לעוקב

 

alluxio.master.hostname=alluxio-leader

# הגדרות Minio
alluxio.underfs.s3.endpoint=http://minio:9000
alluxio.underfs.s3.disable.dns.buckets=true
alluxio.underfs.s3.inherit.acl=false
aws.accessKeyId=minio
aws.secretKey=minio123

# הגדרות להדגמה בלבד
alluxio.security.authorization.permission.enabled=false

הalluxio.master.hostname צריך להיות על כל הצמתים, מנהיגים ועוקבים. רוב ההגדרות המשותפות מכוונות את Alluxio ל-underfs, שהוא MinIO במקרה זה.

alluxio.security.authorization.permission.enabled מוגדר על "false" כדי לשמור על פשטות הסטודיו ב-Docker. 

הערה: זה אינו מומלץ לעשות בסביבת ייצור או CI/CD.

הפעלת שירותים

ראשית, אתה רוצה להתחיל את השירותים. וודא שאתה נמצא בספרייה trino-getting-started/iceberg/trino-alluxio-iceberg-minio. עכשיו, הפעל את הפקודה הבאה:

 
docker-compose up -d

אתה צריך לצפות לראות את הפלט הבא. ייתכן ש-Docker יצטרך להוריד את תמונות ה-Docker לפני שתראה את ההודעות "Created/Started", כך שייתכן שיהיה פלט נוסף:

 

[+] Running 10/10
 ⠿ Network trino-alluxio-iceberg-minio_trino-network          Created                                                                                                                                                                                                      0.0s
 ⠿ Volume "trino-alluxio-iceberg-minio_minio-data"            Created                                                                                                                                                                                                      0.0s
 ⠿ Container trino-alluxio-iceberg-minio-mariadb-1            Started                                                                                                                                                                                                      0.6s
 ⠿ Container trino-alluxio-iceberg-minio-trino-coordinator-1  Started                                                                                                                                                                                                      0.7s
 ⠿ Container trino-alluxio-iceberg-minio-alluxio-leader-1     Started                                                                                                                                                                                                      0.9s
 ⠿ Container minio                                            Started                                                                                                                                                                                                      0.8s
 ⠿ Container trino-alluxio-iceberg-minio-alluxio-follower-1   Started                                                                                                                                                                                                      1.5s
 ⠿ Container mc                                               Started                                                                                                                                                                                                      1.4s
 ⠿ Container trino-alluxio-iceberg-minio-hive-metastore-1     Started

פתיחת CLI של Trino

ברגע שזה נגמר, אפשר להתחבר לצמת המנהיג של Trino. נעשה זאת באמצעות הפקודה exec ונריץ את אישור ה-CLI של trino כפקודה שנריץ במכונית זו. שים לב שמספר תיבת המכונה הוא trino-alluxio-iceberg-minio-trino-coordinator-1, אז הפקודה שתרוץ תהיה:

 

<<<<<<< HEAD
docker container exec -it trino-alluxio-iceberg-minio-trino-coordinator-1 trino
=======
docker container exec -it trino-minio_trino-coordinator_1 trino
>>>>>>> alluxio

כשאתה מתחיל בשלב זה, אתה צריך לראות את הסמן trino ברגע שההתחלה הושלמה. זה צריך להיראות ככה כשזה נגמר:

 
trino>

כדי להבין בצורה הטובה ביותר איך מתרחש התצורה הזו, בואו ניצור טבלת Iceberg באמצעות שאילתת CTAS (CREATE TABLE AS) המעבירה מידע מאחת המחברות TPC ל-Iceberg שמצביעה על MinIO. המחברות TPC מייצרות מידע בזמן אמת כך שנוכל לבצע בדיקות פשוטות כאלה.

קודם כל, הפעל פקודה להצגת האוספים כדי לראות את האוספים tpch ו-iceberg מאחר ואלו מהם נשתמש בשאילתת CTAS:

 
SHOW CATALOGS;

אתה צריך לראות שהאוסף Iceberg רשום.

מזוודות MinIO ותבניות Trino

לאחר ההתחלה, הפקודה הבאה מבוצעת על מיכל של מילוי ראשוני הכולל את ה-CLI mc של MinIO. זה יוצר מזוודה ב-MinIO בשם /alluxio, מה שנותן לנו מיקום לכתוב את הנתונים שלנו ואנו יכולים להגיד ל-Trino איפה למצוא אותם:

 

/bin/sh -c "
until (/usr/bin/mc config host add minio http://minio:9000 minio minio123) do echo '...waiting...' && sleep 1; done;
/usr/bin/mc rm -r --force minio/alluxio;
/usr/bin/mc mb minio/alluxio;
/usr/bin/mc policy set public minio/alluxio;
exit 0;
"

הערה: מזוודה זו תשמש כנקודת מפתח עבור Alluxio, כך שהמדריד של תיקיית התבנית alluxio://lakehouse/ ב-Alluxio ימתן ל-s3://alluxio/lakehouse/.

שאילתת Trino

נעבור ליצירת הSCHEMA שלנו המצביע על החצר ב-MinIO ואז נפעיל את השאילתת CTAS שלנו. בחזרה למסוף המסד נתונים, צור את הiceberg.lakehouse SCHEMA. זה יהיה הקריאה הראשונה למטאסטור כדי לשמור את מיקום הSCHEMA בסימני האלוקסיו. שימו לב, נצטרך לציין את השם הדוארי alluxio-leader והפורט 19998 מאחר שלא הגדרנו את Alluxio כמערכת הקבצים הברירת מחדל. קחו זאת בחשבון אם ברצונכם שהגיבוב של Alluxio יהיה השימוש הברירת מחדל ושקוף עבור מנהלי המשתמשים המטפלים בהצהרות DDL:

 

CREATE SCHEMA iceberg.lakehouse
WITH (location = 'alluxio://alluxio-leader:19998/lakehouse/');

עכשיו שיש לנו SCHEMA המתייחס לחצר בה אנו מאחסנים את השולחנות שלנו ב-Alluxio, שמסדרת ל-MinIO, אנו יכולים ליצור את השולחן הראשון שלנו.

אופציונלי: כדי לצפות בשאילתות שלכם בהפעלה, היכנסו לממשק Trino והתחברו באמצעות שם משתמש כלשהו (זה לא משנה מאחר שאין אבטחה מוקמת).

העבירו את נתוני הלקוחות מהנתונים הקטנים והנוצרים של TPCH ל-MinIO באמצעות השאילתה CTAS. הפעילו את השאילתה הבאה, ואם אתם רוצים, צפו בה בהפעלה בממשק Trino:

 

CREATE TABLE iceberg.lakehouse.customer
WITH (
  format = 'ORC',
  location = 'alluxio://alluxio-leader:19998/lakehouse/customer/'
) 
AS SELECT * FROM tpch.tiny.customer;

עברו לממשק Alluxio ולממשק MinIO, וגלשו בקבצים של Alluxio ו-MinIO. תראו עכשיו תיקייה lakehouse המכילה תיקייה customer המכילה את הנתונים שכתב Trino ל-Alluxio ו-Alluxio כותב אותם ל-MinIO.

כעת, יש שולחן מתחת ל-Alluxio ו-MinIO, אתה יכול לבדוק את הנתונים הללו על ידי בדיקת הנקודות הבאות:

 
SELECT * FROM iceberg.lakehouse.customer LIMIT 10;

איך אנו בטוחים ש-Trino למעשה קורא מ-Alluxio ולא מ-MinIO? בואו נמחק את הנתונים ב-MinIO ונפעיל את השאילתה שוב רק כדי לוודא. ברגע שתמחק את הנתונים, עדיין צריך לראות נתונים שמחזירים.

עצירת שירותים

ברגע שתשלים את הדרך עבור הדרכה זו, המשאבים שנמצאו בשימוש לתרגיל זה יכולים להיות שוחררים על ידי הרצת הפקודה הבאה:

 
docker-compose down

מסקנה

בשלב זה, כדאי לך להבין יותר טוב את Trino ו-Alluxio, איך להתחיל עם ׇבצעת הפעלת Trino ו-Alluxio, ואיך להשתמש בזיכרון של Alluxio עם חיבור Iceberg ואחסון קבצים של MinIO. אני מקווה שנהניתם מהמאמר הזה. הקפידו לעשות לייק למאמר ולהגיב אם יש לכם שאלות!

Source:
https://dzone.com/articles/get-started-with-trino-and-alluxio-in-five-minutes