Apache Arrow est une plateforme de développement pour l'analyse en mémoire. Elle contient un ensemble de technologies qui permettent aux grands systèmes de données de traiter et de déplacer rapidement les données. Apache Arrow propose un format de données en mémoire multilangage, multiplateforme et en colonnes pour les données. Il élimine le besoin de sérialisation, car les données sont représentées par les mêmes octets sur chaque plateforme et langage de programmation. Ce format commun permet le transfert de données sans copie dans les systèmes Big Data, afin de minimiser les performances du transfert de données.Base de données en mémoire et caractéristiques d'Apache Arrow
Une base de données dite « en mémoire » (in-memory), ou IMDB (In Memory DataBase), ou encore MMDB (Main Memory DB), désigne une base de données dont les informations sont stockées en mémoire centrale afin d'accélérer les temps de réponse. Une IMDB constitue un type de base de données analytique, un système qui stocke des données historiques portant sur des mesures destinées à des applications BI/BA (Business Intelligence/Business Analytics), généralement dans le cadre d'un entrepôt ou d'un magasin de données.
Ces systèmes permettent aux utilisateurs d'exécuter des requêtes et de générer des rapports sur les informations renfermées. Celles-ci sont régulièrement mises à jour pour intégrer les données transactionnelles récentes issues des systèmes opérationnels d'une entreprise. Outre le fait qu'elle permet des temps de réponse extrêmement courts, l'analytique en mémoire vive réduit, voire élimine, le recours à l'indexation des données et au stockage de données préagrégées dans des tables d'agrégats ou des cubes OLAP. Cette capacité diminue les coûts informatiques et accélère la mise en œuvre d'applications BI/BA.
Comme souligné plus haut, Apache Arrow contient un ensemble de technologies qui permettent aux systèmes Big Data de traiter et de déplacer rapidement les données. Il spécifie un format de mémoire en colonnes standardisé indépendant du langage pour les données plates et hiérarchiques, organisé pour des opérations analytiques efficaces sur du matériel moderne. Apache Arrow propose un format de stockage commun sans frais généraux pour de nombreux systèmes Big Data et voudrait devenir un nouveau standard pour le traitement des données en mémoire orienté colonnes.
Le projet a été soutenu dès le départ par de nombreux projets Big Data tels que Cassandra, Drill, HBase, Spark et Storm répertoriés sur Apache (notons que des projets en dehors d'Apache tel que Pandas ont également soutenu son développement). Apache Arrow 3.0.0 vient d'être publiée avec de nombreuses nouvelles fonctionnalités pour la base de données. Celle-ci couvre plus de 3 mois de travail de développement et comprend 666 problèmes résolus provenant de 106 contributeurs distincts. Voici ci-dessous un aperçu de ce dont il s'agit dans cette version.
Arrow Columnar Format
Arrow Columnar Format est un composant d'Apache Arrow et constitue une représentation en mémoire standard et efficace de divers types de données, simples ou imbriquées. En d'autres termes, il comprend une spécification de la structure des données en mémoire, la sérialisation des métadonnées, et un protocole de sérialisation et de transport des données génériques. Il offre des garanties de performance analytique et de localisation des données en échange d'opérations de mutation comparativement plus coûteuses.
Avec la sortie d'Apache Arrow 3, le type de données Decimal256, qui était déjà pris en charge par la spécification du format en colonnes Arrow, est maintenant implémenté en C++ et Java.
Arrow Flight
Un service "flight" est un point d'extrémité permettant de récupérer ou de stocker des données Arrow. Il peut exposer un ou plusieurs points d'extrémité prédéfinis auxquels on peut accéder à l'aide du protocole Arrow Flight. De plus, service "flight" peut exposer un ensemble d'actions qui sont disponibles. Dans Apache Arrow 3, l'authentification en C++/Java/Python a été révisée, permettant des méthodes d'authentification plus souples et l'utilisation d'en-têtes standard. La prise en charge des cookies a également été ajoutée.
Les implémentations C++/Java sont désormais plus permissives lors de l'analyse des messages afin de mieux interagir avec les autres implémentations de Flight. Une implémentation de Flight de base pour C#/.NET a été ajoutée.
La bibliothèque C++
- la réserve de mémoire par défaut peut maintenant être modifiée à l'exécution en utilisant la variable d'environnement "ARROW_DEFAULT_MEMORY_POOL". La variable d'environnement est inspectée au démarrage du processus. Ceci est utile pour essayer de diagnostiquer les problèmes de consommation de mémoire avec Arrow ;
- des itérateurs de type STL sont maintenant fournis sur des tableaux concrets. Ils sont utiles pour les tâches critiques non performantes, par exemple les tests ;
- il est maintenant possible de concaténer des tableaux de dictionnaires avec des dictionnaires inégaux. Les dictionnaires sont unifiés lors de la concaténation, pour les types de données pris en charge ;
- les threads d'un pool de threads sont désormais générés paresseusement selon les besoins pour les tâches en attente, jusqu'à la capacité configurée. Ils étaient auparavant générés dès la création du pool de threads.
La couche de calcul
À titre de rappel, dans Apache Arrow, les fonctions représentent des opérations de calcul sur des entrées de types éventuellement différents. En interne, une fonction est mise en œuvre par un ou plusieurs "noyaux", selon les types d'entrées concrets (par exemple, une fonction ajoutant des valeurs à partir de deux entrées peut avoir des noyaux différents selon que les entrées sont intégrales ou à virgule flottante). Dans Apache Arrow 3, les changements à ce niveau incluent :
- les fonctions sont stockées dans un registre global des fonctions où elles peuvent être recherchées par leur nom ;
- des fonctions de calcul pour le traitement des chaînes de caractères ont été ajoutées : d'une part le fractionnement sur les espaces (saveurs ASCII et Unicode) et le fractionnement sur un motif et d'autre part, le découpage des caractères ;
- le comportement des fonctions de calcul "index_in" et "is_in" avec des zéros a été modifié pour des raisons de cohérence ;
- des noyaux de tri à colonnes multiples sont désormais disponibles pour les tableaux et les lots d'enregistrement ;
- les performances du filtrage des tables ont été considérablement améliorées ;
- des arguments scalaires sont maintenant acceptés pour un plus grand nombre de fonctions de calcul ;
- les fonctions de calcul "quantile" et "is_nan" ont été ajoutées pour les données numériques ;
- les fonctions d'agrégation "any" et "all" ont été ajoutées pour les données booléennes.
Les ensembles de données
- la...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.