ترينو هو محرك استعلام SQL موزع مفتوح المصدر مصمم لإجراء استعلامات على مجموعات كبيرة من البيانات الموزعة على واحد أو أكثر من المصادر المعقدة. تم تصميم ترينو للتعامل مع تخزين البيانات، ETL، والتحليلات التفاعلية بكميات كبيرة من البيانات وإنتاج تقارير.
Alluxio هو منصة تنظيم البيانات مفتوحة المصدر للتحليلات والذكاء الاصطناعي على نطاق واسع. Alluxio يقع بين إطارات الحساب مثل ترينو وأباتشي سبارك وأنظمة تخزين متعددة مثل أمازون S3، جوجل كلاود ستوريج، HDFS، ومينيو.
هذا درس تعليمي لنشر Alluxio كطبقة تخزين مؤقت لترينو باستخدام موصل Iceberg.
لماذا نحتاج إلى تخزين مؤقت لترينو؟
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.
ترينو يحتوي على محرك تخزين مؤقت مدمج، Rubix، في موصل هايف. على الرغم من أن هذا النظام مريح لأنه يأتي مع ترينو، إلا أنه محصور في موصل هايف ولم يتم تحديثه منذ عام 2020. كما أنه يفتقر إلى ميزات الأمان والدعم للمحولات الحسابية الإضافية.
ترينو على Alluxio
Alluxio يربط ترينو بأنظمة تخزين متعددة، مما يوفر واجهات برمجة تطبيقات تعتمد على البيانات وإسم موحد للفضاء. Alluxio يسمح لترينو بالوصول إلى البيانات بغض النظر عن مصدر البيانات ويخزن بشكل شفاف البيانات التي يتم الوصول إليها بشكل متكرر (على سبيل المثال، الجداول الشائعة الاستخدام) في تخزين Alluxio الموزع.
استخدام تخزين Alluxio عبر موصل Iceberg على تخزين ملفات MinIO
لقد أنشأنا مثالاً يوضح كيفية تكوين Alluxio لاستخدام تخزين مؤقت الكتابة من خلال MinIO. يتم تحقيق هذا عن طريق استخدام موصل Iceberg وإجراء تغيير واحد في خاصية الموقع على الجدول من وجهة نظر ترينو.
في هذه العرض التوضيحي، يتم تشغيل 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/
يقوم القائد بتعريض الموا ports 19998
و 19999
، حيث تشير الأخيرة إلى المو port لواجهة الويب.
إعدادات المتابع
alluxio.worker.ramdisk.size=1G
alluxio.worker.hostname=alluxio-follower
يقوم المتابع بتعريض الموا ports 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
فتح واجهة برمجة تطبيقات 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>
لفهم أفضل كيف يعمل هذا التكوين، دعونا نقوم بإنشاء جدول Iceberg باستخدام عملية CTAS (CREATE TABLE AS) التي تدفع البيانات من إحدى موصلات TPC إلى Iceberg التي تشير إلى MinIO. تولد موصلات TPC البيانات على الفور لذا يمكننا إجراء اختبارات بسيطة مثل هذه.
أولاً، قم بتشغيل أمر لإظهار الكتالوجات لرؤية tpch
و iceberg
كتالوجات حيث سنستخدمها في عملية CTAS الاستعلام:
SHOW CATALOGS;
يجب أن ترى أن كتالوج Iceberg مسجل.
دلائل MinIO Buckets و Trino Schemas
عند التشغيل، يتم تنفيذ الأمر التالي في حاوية التهيئة الأولية التي تشمل 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
. سيكون هذا هو المكالمة الأولى إلى محضر البيانات لحفظ موقع موقع النظام البيئي في مساحة Alluxio. لاحظ، سنحتاج إلى تحديد المضيف 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