Trino is een open-source gedistribueerde SQL-query-engine ontworpen om grote gegevenssets te onderzoeken die zijn verspreid over één of meer heterogene gegevensbronnen. Trino is ontworpen om gegevensopslag, ETL en interactieve analyses aan te pakken door grote hoeveelheden gegevens te verwerken en rapporten te produceren.
Alluxio is een open-source databiorchestratieplatform voor grootschalige analyses en AI. Alluxio bevindt zich tussen berekeningsframeworks zoals Trino en Apache Spark en verschillende opslagsystemen zoals Amazon S3, Google Cloud Storage, HDFS en MinIO.
Dit is een handleiding voor het implementeren van Alluxio als cachelaag voor Trino met behulp van de Iceberg-connector.
Waarom hebben we caching nodig voor 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 beschikt over een ingebouwde caching-engine, Rubix, in zijn Hive-connector. Hoewel dit systeem handig is omdat het met Trino wordt meegeleverd, is het beperkt tot de Hive-connector en is het niet onderhouden sinds 2020. Het mist ook beveiligingsfuncties en ondersteuning voor extra berekeningsmotoren.
Trino op Alluxio
Alluxio verbindt Trino met verschillende opslagsystemen, biedt API’s en een geïntegreerde naamruimte voor data-driven applicaties. Alluxio stelt Trino in staat om gegevens te benaderen ongeacht de gegevensbron en cacheert transparant vaak gebruikte gegevens (bijvoorbeeld veelgebruikte tabellen) in Alluxio’s gedistribueerde opslag.
Het gebruik van Alluxio Caching via de Iceberg-connector over MinIO-bestandsopslag
We hebben een demo gemaakt die laat zien hoe u Alluxio kunt configureren om write-through caching met MinIO te gebruiken. Dit wordt bereikt door de Iceberg-connector te gebruiken en één wijziging aan te brengen in de locatie-eigenschap van de tabel vanuit het perspectief van Trino.
In deze demo wordt Alluxio uitgevoerd op afzonderlijke servers; echter, het wordt aanbevolen om het op dezelfde knooppunten als Trino te draaien. Dit betekent dat alle configuraties voor Alluxio zich op de servers bevinden waar Alluxio draait, terwijl de configuratie van Trino onaangetast blijft. Het voordeel van het extern draaien van Alluxio is dat het niet om middelen zal concurreren met Trino, maar het nadeel is dat gegevens over het netwerk moeten worden overgedragen bij het lezen uit Alluxio. Het is cruciaal voor prestaties dat Trino en Alluxio zich op hetzelfde netwerk bevinden.
Om deze demo te volgen, kopieer de code die zich hier bevindt.
Trino Configuration
Trino is identiek geconfigureerd aan een standaard Iceberg configuratie. Aangezien Alluxio extern draait ten opzichte van Trino, is de enige configuratie nodig tijdens het uitvoeren van query’s en niet bij opstarten.
Alluxio Configuration
De configuratie voor Alluxio kan allemaal worden ingesteld met behulp van het alluxio-site.properties
bestand. Om alle configuraties te houden die samen zijn geplaatst op het docker-compose.yml
, stellen we ze in met Java-eigenschappen via de ALLUXIO_JAVA_OPTS
omgevingsvariabele. Deze tutorial verwijst ook naar de master-node als de leider en de werknemers als volgers.
Master Configuraties
alluxio.master.mount.table.root.ufs=s3://alluxio/
De leider exposeert poorten 19998
en 19999
, waarvan de laatste de poort is voor de web-UI.
Worker Configuraties
alluxio.worker.ramdisk.size=1G
alluxio.worker.hostname=alluxio-follower
De volger exposeert poorten 29999
en 30000
, en stelt een gedeelde geheugen in dat door Alluxio wordt gebruikt om gegevens op te slaan. Dit is ingesteld op 1G
via de shm_size
eigenschap en wordt geraadpleegd vanuit de alluxio.worker.ramdisk.size
eigenschap.
Gedeelde Configuraties Tussen Leider en Volger
alluxio.master.hostname=alluxio-leader
# Minio configs
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
# Demo-only configs
alluxio.security.authorization.permission.enabled=false
De alluxio.master.hostname
moet op alle knooppunten, leiders en volgers aanwezig zijn. Het overgrote deel van de gedeelde configuraties wijst Alluxio naar de underfs
, in dit geval MinIO.
alluxio.security.authorization.permission.enabled
is ingesteld op “false” om de Docker-setup eenvoudig te houden.
Opmerking: Dit wordt niet aanbevolen in een productie- of CI/CD-omgeving.
Diensten uitvoeren
Eerst wil je de diensten starten. Zorg ervoor dat je in de trino-getting-started/iceberg/trino-alluxio-iceberg-minio
directory bent. Voer nu de volgende opdracht uit:
docker-compose up -d
Je kunt verwachten dat het volgende resultaat verschijnt. Docker moet mogelijk de Docker-afbeeldingen downloaden voordat je de “Created/Started” berichten ziet, dus er kan extra output zijn:
[+] 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 CLI openen
Zodra dit is voltooid, kun je inloggen op het Trino-coordinator-knooppunt. We zullen dit doen door de exec
opdracht te gebruiken en de trino
CLI-uitvoerbare bestand als de opdracht die we op dat container uitvoeren. Let op dat de container-id trino-alluxio-iceberg-minio-trino-coordinator-1
is, dus de opdracht die je zult uitvoeren is:
<<<<<<< HEAD
docker container exec -it trino-alluxio-iceberg-minio-trino-coordinator-1 trino
=======
docker container exec -it trino-minio_trino-coordinator_1 trino
>>>>>>> alluxio
Wanneer je deze stap start, zou je na voltooiing van de opstart de trino
cursor moeten zien. Het zou er zo uitzien wanneer het klaar is:
trino>
Om het beste te begrijpen hoe deze configuratie werkt, laten we een Iceberg-tabel maken met behulp van een CTAS (CREATE TABLE AS) query die gegevens uit een van de TPC-connectors naar Iceberg stuurt, die naar MinIO verwijst. De TPC-connectors genereren gegevens op het moment, zodat we eenvoudige tests zoals deze kunnen uitvoeren.
Eerst voer je een opdracht uit om de catalogi weer te geven om de tpch
en iceberg
catalogi te zien, aangezien dit is wat we in de CTAS-query zullen gebruiken:
SHOW CATALOGS;
Je zou moeten zien dat de Iceberg-catalogus geregistreerd is.
MinIO Buckets en Trino Schemas
Bij opstart wordt de volgende opdracht uitgevoerd op een initialisatiecontainer die de mc
CLI voor MinIO bevat. Dit creëert een bucket in MinIO genaamd /alluxio
, wat ons een locatie biedt om onze gegevens naar te schrijven en we kunnen Trino vertellen waar het te vinden is:
/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;
"
Opmerking: Deze bucket zal fungeren als de aankoppelpunt voor Alluxio, dus de schema directory alluxio://lakehouse/
in Alluxio zal afgebeeld worden op s3://alluxio/lakehouse/
.
Query’s uitvoeren in Trino
Laten we nu ons SCHEMA
maken dat naar de bucket in MinIO verwijst en vervolgens onze CTAS-query uitvoert. Ga terug naar de terminal en maak het iceberg.lakehouse
SCHEMA
aan. Dit is de eerste oproep naar de metastore om de locatie van het schemalocatie in de Alluxio-naamruimte op te slaan. Let op, we moeten het hostnaam alluxio-leader
en poort 19998
opgeven, omdat we Alluxio niet als standaard bestandssysteem hebben ingesteld. Neem dit mee in overweging als je Alluxio-caching als standaardgebruik wilt hebben en transparant voor gebruikers die DDL-instructies beheren:
CREATE SCHEMA iceberg.lakehouse
WITH (location = 'alluxio://alluxio-leader:19998/lakehouse/');
Nu we een SCHEMA
hebben dat verwijst naar de bucket waar we onze tabellen in Alluxio opslaan, die synchroon is met MinIO, kunnen we onze eerste tabel aanmaken.
Optioneel: Om uw queries uit te voeren, log in op de Trino UI en log in met een willekeurige gebruikersnaam (het maakt niet uit omdat er geen beveiliging is ingesteld).
Verplaats de klantgegevens uit de kleine gegenereerde TPCH-gegevens naar MinIO met behulp van een CTAS-query. Voer de volgende query uit en kijk indien gewenst naar de voortgang op de Trino UI:
CREATE TABLE iceberg.lakehouse.customer
WITH (
format = 'ORC',
location = 'alluxio://alluxio-leader:19998/lakehouse/customer/'
)
AS SELECT * FROM tpch.tiny.customer;
Ga naar de Alluxio UI en de MinIO UI en blader door de Alluxio en MinIO-bestanden. Je zult nu een lakehouse
directory zien die een customer
directory bevat met de door Trino naar Alluxio geschreven gegevens en Alluxio die het naar MinIO schrijft.
Nu bevindt zich een tabel onder Alluxio en MinIO, u kunt deze gegevens opvragen door het volgende te controleren:
SELECT * FROM iceberg.lakehouse.customer LIMIT 10;
Hoe weten we zeker dat Trino daadwerkelijk uit Alluxio leest en niet uit MinIO? Laten we de gegevens in MinIO verwijderen en de query opnieuw uitvoeren om zeker te zijn. Zodra u deze gegevens verwijdert, zou u nog steeds gegevens moeten zien terugkomen.
Services stoppen
Zodra u deze tutorial hebt voltooid, kunnen de resources die voor deze oefening zijn gebruikt, worden vrijgegeven door de volgende opdracht uit te voeren:
docker-compose down
Conclusie
Op dit moment zou u een beter begrip moeten hebben van Trino en Alluxio, hoe te beginnen met het implementeren van Trino en Alluxio, en hoe te om Alluxio caching te gebruiken met een Iceberg connector en MinIO bestand opslag. Ik hoop dat je van dit artikel genoten hebt. Zorg ervoor om dit artikel te liken en te reageren als u vragen heeft!
Source:
https://dzone.com/articles/get-started-with-trino-and-alluxio-in-five-minutes