Actian Vector ingestion de données
Actian Corporation
11 juillet 2018

L'utilité d'une base de données analytique est étroitement liée à sa capacité d'ingérer, de stocker et de traiter de grandes quantités de données. Les données proviennent généralement de sources multiples telles que les bases de données opérationnelles, les fichiers CSV et les flux de données continus. Dans la plupart des cas, les charges de données quotidiennes se mesurent en dizaines ou centaines de millions de lignes, de sorte que le mécanisme SQL INSERT traditionnel n'est pas bien adapté à ces volumes de données.
Dans cet article de blog, nous examinerons Actian Vector, notre base de données en colonnes idéalement adaptée aux applications analytiques, et nous évaluerons une variété d'options d'ingestion de données CSV qui fonctionnent aux débits de données requis. Dans les prochains articles, nous examinerons l'exécution d'Actian VectorH dans un environnement Hadoop et l'ingestion à partir de sources de données streaming .
Le but de cet exercice n'est pas de comparer les performances de l'ingestion de données , mais d'évaluer la vitesse relative de différentes méthodes dans le même environnement matériel. Nous évaluerons SQL INSERT comme base de référence, SQL COPY TABLE, vwload en ligne de commande, et les outils ETL/workflow Pentaho Data Integration (aka Kettle), Talend Open Studio for Data Integration, et Apache NiFi. Talend et Pentaho sont des outils ETL traditionnels qui ont évolué pour inclure une variété de chargeurs de masse et d'autres outils et technologies dits "big data" ; tous deux sont basés sur l'interface utilisateur Eclipse. NiFi a été mis à la disposition de la Fondation Apache par l'Agence nationale de sécurité des États-Unis (NSA) et est un outil polyvalent permettant d'automatiser le flux de données entre les systèmes logiciels ; il utilise une interface utilisateur basée sur le web.
Tous trois mettent en œuvre un concept de graphe dirigé avec des données circulant d'un opérateur à l'autre et des opérateurs s'exécutant en parallèle. Pentaho et Talend ont des éditions communautaires et des abonnements, tandis que NiFi est un logiciel libre d'Apache.
Le serveur Vector est un ordinateur de bureau équipé d'un processeur hexagonal AMD Opteron 6234, d'une mémoire de 64 Go et de disques rotatifs SATA (coût du matériel ~ 2 500 $), qui utilise la version 5.0 de Vector pour un seul nœud.
À titre de comparaison, nous insérerons environ 24 millions d'enregistrements dans la table lineitem du référentiel TPCH. La structure de cette table est la suivante
l_orderkey bigint NOT NULL, l_partkey INT NOT NULL, l_suppkey INT NOT NULL, l_linenumber INT NOT NULL, l_quantity NUMERIC(19,2) NOT NULL, l_extendedprice NUMERIC(19,2) NOT NULL, l_discount NUMERIC(19,2) NOT NULL, l_tax NUMERIC(19,2) NOT NULL, l_returnflag CHAR(1) NOT NULL, l_linestatus CHAR(1) NOT NULL, l_shipdate DATE NOT NULL, l_commitdate DATE NOT NULL, l_receiptdate DATE NOT NULL, l_shipinstruct CHAR(25) NOT NULL, l_shipmode CHAR(10) NOT NULL, l_comment VARCHAR(44) NOT NULL
SQL INSERT
Comme Vector est compatible avec ANSI SQL, le mécanisme d'ingestion le plus évident est sans doute la construction SQL INSERT standard. Il s'agit généralement de l'option la moins performante, car elle se traduit par des opérations d'insertion uniques. Les insertions peuvent être optimisées dans une certaine mesure en utilisant la paramétrisation et en insérant des enregistrements par lots, mais même cela peut ne pas fournir le niveau de performance requis.
Pour le test SQL INSERT, nous construirons un flux de travail Pentaho simple avec deux étapes, l'une pour lire le fichier de données CSV et l'autre pour insérer ces lignes dans une base de données Vector. Nous exécuterons également le flux de travail sur le même nœud que l'instance Vector ainsi que sur un nœud distant afin d'évaluer l'effet de la surcharge du réseau.
Dans cette situation, le chargement à partir d'un nœud distant est légèrement plus performant que le chargement à partir du nœud local et les performances s'améliorent généralement avec l'augmentation de la taille du lot jusqu'à environ 100 000 enregistrements, avant de s'aplanir. Cela ne veut pas dire que 100 000 est toujours la taille de lot optimale ; elle varie probablement en fonction de la taille des lignes.
Vecteur COPY TABLE
La construction Vector COPY TABLE est utilisée pour charger en masse les données d'un fichier CSV dans la base de données. Si elle est exécutée à partir d'un nœud distant, cette approche nécessite l'installation du Client Runtime de Vector, à savoir Ingres Net et le moniteur de terminal Ingres SQL. Le Client Runtime est disponible gratuitement et ne nécessite aucune licence. Pentaho et Talend ont tous deux intégré support pour cette construction, bien que l'implémentation soit légèrement différente. Pentaho utilise des tuyaux nommés pour acheminer les données vers l'opérateur, tandis que Talend crée un fichier disque intermédiaire et appelle ensuite l'opérateur.
L'implémentation de Talend utilise deux opérateurs, tFileInputDelimited, lecteur de fichiers délimités, et tIngresOutputBulkExec, chargeur Ingres/Vector COPY TABLE.
Le chargeur est configuré avec les détails de connexion à la base de données, la table cible et le fichier intermédiaire.
L'implémentation de Pentaho utilise deux opérateurs équivalents, CSV file input, lecteur de fichiers délimités, et Ingres VectorWise Bulk Loader, chargeur de tables de base de données.
Le loader est configuré avec une connexion Vector et une table cible. Contrairement à Talend, le loader Pentaho n'utilise pas de fichier de staging intermédiaire.
Les performances des deux outils sont essentiellement les mêmes, mais elles sont de l'ordre de 6 fois plus rapides que celles de SQL INSERT. Apache NiFi ne fournit pas le support natif support Vector COPY TABLE et simuler cette approche en lançant le moniteur de terminal séparément et en se connectant avec des tuyaux nommés est relativement lourd.
Vecteur vwload
L'utilitaire vwload fourni par Vector est un chargeur en vrac de de haute performance pour Actian Vector et VectorH. Il s'agit d'un utilitaire en ligne de commande conçu pour charger un ou plusieurs fichiers dans une table Vector ou VectorH à partir du système de fichiers local ou de HDFS. Nous explorerons la variante HDFS dans un prochain article.
Vwload peut être invoqué de manière autonome ou en tant que mécanisme de chargement de données pour les flux de travail générés par Pentaho, Talend ou NiFi. Pentaho dispose d'un support vwload intégré tandis que Talend et NiFi fournissent un mécanisme pour diriger les flux de données de workflow vers vwload sans persister d'abord sur le disque.
L'implémentation de Talend utilise tFileInputDelimited pour lire le fichier CSV source et tFileOutputDelimited pour écrire les lignes du fichier source dans un tube nommé. Pour charger le flux de données dans Vector, nous devons exécuter vwload avec le même tube nommé que le fichier source.
Pour démarrer vwload, nous utilisons la construction Prejob pour déclencher l'opérateur tSystem, tSystem étant le mécanisme permettant d'exécuter des commandes au niveau du système d'exploitation ou des scripts de l'interpréteur de commandes. L'opérateur Prejob est déclenché automatiquement au début du travail avant tout autre opérateur de flux de travail et est configuré pour déclencher l'opérateur tSystem.
L'opérateur tFileOutputDelimited est configuré pour écrire dans le tuyau nommé défini par la variable d'environnement context.pipeName. Le tuyau nommé doit exister au moment de l'exécution du travail et la case Append doit être cochée.
Dans ce cas, l'opérateur tSystem exécute le script shell talend_load.sh en passant les paramètres pour le nom de la table, le nom de la base de données, le nom du tuyau et le répertoire du fichier journal résultant. La notation context. est le mécanisme de référencement des variables d'environnement associées au job, ce qui permet de paramétrer les jobs. Le script shell est le suivant :
#!/bin/bash nohup vwload -m -t $1 $2 $3 > $4/log_`date +%Y%m%d_%H%M%S`.log 2>&1 &
La séquence d'exécution qui en résulte est la suivante :
- Exécuter l'opérateur Prejob
- Déclencheurs préalables à l'emploi tOpérateur de système
- tL'opérateur système exécute un script shell
- Le script shell lance vwload en arrière-plan et revient ; vwload lit maintenant à partir du tuyau nommé et attend l'arrivée des lignes.
- Lancer tFileInputDelimited pour lire les lignes du fichier source
- Démarrer tFileOutputDelimited pour recevoir les lignes entrantes et les écrire dans le tuyau nommé.
L'implémentation de Pentaho utilise l'entrée du fichier CSV et les opérateurs Ingres VectorWise Loader comme dans le cas de COPY TABLE, mais le bulk loader est configuré pour utiliser vwload à la place.
L'option "utiliser vwload" est sélectionnée et le champ "Chemin d'accès à la commande sql" est vide. C'est la façon d'invoquer l'utilitaire vwload.
L'implémentation d'Apache NiFi utilise trois opérateurs : GetFile, qui écoute les répertoires, FetchFile, qui lit le fichier, et ExecuteStreamCommand, qui transmet les données du fichier streaming au processus vwload en arrière-plan.
FetchFile transmet le flux de données source à ExecuteStreamCommand, qui est configuré pour exécuter un script shell.
Le script shell lancera vwload en arrière-plan et dirigera le flux de données vers vwload via un tuyau nommé. La notation ${} est le mécanisme permettant de référencer les propriétés configurées avec un fichier de propriétés externe. Cela permet de configurer le processeur de flux au moment de l'exécution.
#!/bin/bash nomTable=1 dbName=$2 loadPipe=3 logDir=$4 echo "`date +%Y-%m-%d\ %H:%M:%S` vwload -m -t $tableName db $dbName $loadPipe " >> $logDir/load.log vwload -uactian -m -t $tableName $dbName $loadPipe >> $logDir/load.log 2>&1 & cat /dev/stdin >>$loadPipe
La ligne de commande vwload est utilisée comme mécanisme de chargement dans les workflows Pentaho, Talend et NiFi précédents. À titre de comparaison, nous chargeons également le même jeu de données à l'aide de vwload autonome sur la machine locale de Vector ainsi qu'à partir du client distant utilisant Ingres Net.
Les temps d'attente et les taux d'ingestion varient considérablement en fonction du matériel et de la taille des lignes.
En résumé, les options d'ingestion de données sont, par ordre croissant de performance, SQL INSERT, SQL COPY TABLE et vwload. Pour les volumes de données importants, vwload utilisé avec l'outil ETL approprié est généralement le bon choix. Le choix de l'outil ETL est généralement dicté par les performances et les fonctionnalités. Au minimum, il doit y avoir un mécanisme d'interface avec la méthode d'ingestion choisie. Les exigences en matière de fonctionnalité dépendent principalement de la quantité et du type de transformation à effectuer sur le flux de données entrant. Même si les données entrantes doivent être chargées telles quelles, un outil ETL peut toujours être utile pour la détection des fichiers entrants, la planification des tâches et le signalement des erreurs.
Les flux de travail ci-dessus représentent le cas trivial de l'ingestion de fichiers CSV, qui consiste généralement à lire un fichier de données source et à le charger dans Vector. En tant que tels, ils représentent également les meilleures performances pour chacune des méthodes d'ingestion. La plupart des cas d'utilisation réels impliquent un certain degré de logique de transformation dans le flux de travail, les taux de flux de données diminuant en fonction de la complexité de la transformation. La mesure des taux de données du flux de travail nous permet de sélectionner la méthode d'ingestion qui répond à ces exigences.
En savoir plus sur Actian Vector
Vous pouvez en savoir plus sur Actian Vector en consultant les ressources suivantes :
- La page produit Actian Vector
- Nos forums de la communauté Actian Vector
- Voir les derniers changements dans Actian Vector 5.1
En savoir plus sur les éditions de la communauté Actian Vector :
S'abonner au blog d'Actian
Abonnez-vous au blogue d'Actian pour recevoir des renseignements sur les données directement à vous.
- Restez informé - Recevez les dernières informations sur l'analyse des données directement dans votre boîte de réception.
- Ne manquez jamais un article - Vous recevrez des mises à jour automatiques par courrier électronique pour vous avertir de la publication de nouveaux articles.
- Tout dépend de vous - Modifiez vos préférences de livraison en fonction de vos besoins.