DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Uncategorized»Démarrez avec Trino et Alluxio en cinq minutes
    Uncategorized

    Démarrez avec Trino et Alluxio en cinq minutes

    février 10, 2023
    Démarrez avec Trino et Alluxio en cinq minutes
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    Trino est un moteur de requête SQL distribué open source conçu pour interroger de grands ensembles de données répartis sur une ou plusieurs sources de données hétérogènes. Trino a été conçu pour gérer l’entreposage de données, l’ETL et l’analyse interactive par de grandes quantités de données et produire des rapports.

    Alluxio est une plateforme d’orchestration de données open source pour l’analyse et l’IA à grande échelle. Alluxio se situe entre des frameworks de calcul tels que Trino et Apache Spark et divers systèmes de stockage comme Amazon S3, Google Cloud Storage, HDFS et MinIO.

    Ceci est un tutoriel pour déployer Alluxio en tant que couche de mise en cache pour Trino à l’aide du connecteur Iceberg.

    Pourquoi avons-nous besoin de la mise en cache pour Trino ?

    Une petite fraction des pétaoctets de données que vous stockez génère de la valeur commerciale à tout moment. L’analyse répétée des mêmes données et leur transfert sur le réseau consomment du temps, des cycles de calcul et des ressources. Ce problème est aggravé lors de l’extraction de données à partir de clusters Trino disparates dans des régions ou des clouds. Dans ces circonstances, les solutions de mise en cache peuvent réduire considérablement la latence et le coût de vos requêtes.

    Trino a un moteur de mise en cache intégré, Rubix, dans son connecteur Hive. Bien que ce système soit pratique car il est fourni avec Trino, il est limité au connecteur Hive et n’a pas été maintenu depuis 2020. Il manque également de fonctionnalités de sécurité et de prise en charge de moteurs de calcul supplémentaires.

    Trino sur Alluxio

    Alluxio connecte Trino à divers systèmes de stockage, fournissant des API et un espace de noms unifié pour les applications basées sur les données. Alluxio permet à Trino d’accéder aux données quelle que soit la source de données et de mettre en cache de manière transparente les données fréquemment consultées (par exemple, les tables couramment utilisées) dans le stockage distribué Alluxio.

    Image Alluxio

    Utilisation de la mise en cache Alluxio via le connecteur Iceberg sur le stockage de fichiers MinIO

    Nous avons créé une démo qui montre comment configurer Alluxio pour utiliser la mise en cache en écriture avec MinIO. Ceci est réalisé en utilisant le connecteur Iceberg et en apportant une seule modification à la propriété d’emplacement sur la table du point de vue Trino.

    Dans cette démo, Alluxio est exécuté sur des serveurs distincts ; cependant, il est recommandé de l’exécuter sur les mêmes nœuds que Trino. Cela signifie que toutes les configurations d’Alluxio seront situées sur les serveurs sur lesquels Alluxio s’exécute, tandis que la configuration de Trino reste inchangée. L’avantage d’exécuter Alluxio en externe est qu’il ne concurrencera pas les ressources avec Trino, mais l’inconvénient est que les données devront être transférées sur le réseau lors de la lecture à partir d’Alluxio. Il est crucial pour les performances que Trino et Alluxio soient sur le même réseau.

    Pour suivre cette démo, copiez le code situé ici.

    Configuration trino

    Trino est configuré de manière identique à une configuration Iceberg standard. Étant donné qu’Alluxio s’exécute en dehors de Trino, la seule configuration nécessaire est au moment de la requête et non au démarrage.

    Configuration Alluxio

    La configuration d’Alluxio peut être définie à l’aide du alluxio-site.properties déposer. Pour conserver toutes les configurations colocalisées sur le docker-compose.ymlnous les configurons à l’aide des propriétés Java via le ALLUXIO_JAVA_OPTS variables d’environnement. Ce didacticiel fait également référence au nœud maître en tant que leader et aux travailleurs en tant que suiveurs.

    Configurations principales

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

    Le leader expose les ports 19998 et 19999ce dernier étant le port de l’interface utilisateur Web.

    Configurations de travail

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

    Le suiveur expose les ports 29999 et 30000, et met en place une mémoire partagée utilisée par Alluxio pour stocker les données. Ceci est réglé sur 1G via le shm_size propriété et est référencé à partir de la alluxio.worker.ramdisk.size propriété.

    Configurations partagées entre le leader et le suiveur

    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

    Le alluxio.master.hostname doit être sur tous les nœuds, leaders et suiveurs. La majorité des configs partagées pointent Alluxio vers le underfsqui est MinIO dans ce cas.

    alluxio.security.authorization.permission.enabled est défini sur « false » pour simplifier la configuration de Docker.

    Note: Il n’est pas recommandé de le faire dans un environnement de production ou CI/CD.

    Les services en cours d’exécution

    Tout d’abord, vous souhaitez démarrer les services. Assurez-vous que vous êtes dans le trino-getting-started/iceberg/trino-alluxio-iceberg-minio annuaire. Maintenant, exécutez la commande suivante :

    Vous devez vous attendre à voir la sortie suivante. Docker devra peut-être également télécharger les images Docker avant que vous ne voyiez les messages « Created/Started », il pourrait donc y avoir une sortie supplémentaire :

    [+] 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

    Ouvrir la CLI de Trino

    Une fois cette opération terminée, vous pouvez vous connecter au nœud du coordinateur Trino. Nous le ferons en utilisant le exec commande et exécutez le trino Exécutable CLI en tant que commande que nous exécutons sur ce conteneur. Notez que l’identifiant du conteneur est trino-alluxio-iceberg-minio-trino-coordinator-1donc la commande que vous exécuterez est :

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

    Lorsque vous commencez cette étape, vous devriez voir le trino curseur une fois le démarrage terminé. Cela devrait ressembler à ceci quand c’est fait:

    Pour mieux comprendre le fonctionnement de cette configuration, créons une table Iceberg à l’aide d’une requête CTAS (CREATE TABLE AS) qui pousse les données de l’un des connecteurs TPC vers Iceberg qui pointe vers MinIO. Les connecteurs TPC génèrent des données à la volée afin que nous puissions exécuter des tests simples comme celui-ci.

    Tout d’abord, exécutez une commande pour afficher les catalogues afin de voir les tpch et iceberg catalogues puisque c’est ce que nous utiliserons dans la requête CTAS :

    Vous devriez voir que le catalogue Iceberg est enregistré.

    Compartiments MinIO et schémas Trino

    Au démarrage, la commande suivante est exécutée sur un conteneur d’initialisation qui inclut le mc CLI pour MinIO. Cela crée un compartiment dans MinIO appelé /alluxioce qui nous donne un emplacement où écrire nos données et nous pouvons indiquer à Trino où les trouver :

    /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;
    "

    Note: Ce bucket servira de point de montage pour Alluxio, de sorte que le répertoire de schéma alluxio://lakehouse/ dans Alluxio mappera sur s3://alluxio/lakehouse/.

    Interroger Trino

    Passons à la création de notre SCHEMA qui nous pointe vers le compartiment dans MinIO, puis exécutez notre requête CTAS. De retour dans le terminal, créez le iceberg.lakehouse SCHEMA. Ce sera le premier appel au métastore pour enregistrer l’emplacement de l’emplacement du schéma dans l’espace de noms Alluxio. Remarquez, nous devrons spécifier le nom d’hôte alluxio-leader et port 19998 car nous n’avons pas défini Alluxio comme système de fichiers par défaut. Tenez-en compte si vous souhaitez que la mise en cache d’Alluxio soit l’utilisation par défaut et transparente pour les utilisateurs qui gèrent les instructions DDL :

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

    Maintenant que nous avons un SCHEMA qui référence le bucket où nous stockons nos tables dans Alluxio, qui se synchronise avec MinIO, nous pouvons créer notre première table.

    Facultatif: Pour voir vos requêtes exécutées, connectez-vous à l’interface utilisateur de Trino et connectez-vous en utilisant n’importe quel nom d’utilisateur (cela n’a pas d’importance car aucune sécurité n’est configurée).

    Déplacez les données client des minuscules données TPCH générées vers MinIO à l’aide d’une requête CTAS. Exécutez la requête suivante et, si vous le souhaitez, regardez-la s’exécuter sur l’interface utilisateur de Trino :

    CREATE TABLE...
    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.