VT2020-Apache Arrow-Fiche



= Introduction =

Apache arrow a été créé en octobre 2016 et est toujours en développement: la dernière version stable (v2.0.0) est sortie le 19 octobre 2020.

Apache Arrow possède des bibliothèques pour:
 * C
 * C++
 * C#
 * Go
 * Java
 * JavaScript
 * Rust
 * MATLAB (via la bibliothèque C++)
 * Python (via la bibliothèque C++)
 * R (via la bibliothèque C++)
 * Ruby (via la bibliothèque C++).

Ces bibliothèques font l'objet de tests d'intégration les unes par rapport aux autres afin de garantir leur fidélité au format. Ces bibliothèques officielles permettent à des projets tiers de travailler avec les données Arrow sans avoir à implémenter eux-mêmes le format en colonnes Arrow.

= Qu'est ce que Apache Arrow =

Apache Arrow est une plate-forme de développement logiciel pour la création d'applications hautes performances qui traitent et transportent de grands ensembles de données. Elle est conçue pour améliorer à la fois les performances des algorithmes analytiques et l'efficacité du transfert de données d'un système ou d'un langage de programmation à un autre.





Un élément essentiel d'Apache Arrow est son format en colonne en mémoire, une spécification standardisée et agnostique du langage pour représenter des ensembles de données structurés et semblables à des tableaux en mémoire. Le format Apache Arrow permet aux moteurs d'exécution de maximiser leur efficacité lors de l'analyse et de l'itération de gros volumes de données. Sans un format standard de données en colonnes, chaque base de données et chaque langage possède son propre format de données interne ce qui génère beaucoup de gaspillage. Le déplacement des données d'un système à l'autre implique une sérialisation et une désérialisation coûteuses en temps et en mémoire. En outre, les algorithmes communs doivent souvent être réécrits pour chaque format de données :



Le format de données en colonnes en mémoire de Arrow est une solution toute prête pour résoudre ces problèmes. Les systèmes qui utilisent ou prennent en charge Arrow peuvent transférer des données entre eux à un coût minime, voire nul. De plus, ils n'ont pas besoin de mettre en place des connecteurs personnalisés pour tous les autres systèmes. En plus de ces économies, un format de mémoire standardisé facilite la réutilisation des bibliothèques d'algorithmes, même entre les langages :



Dans la plupart des systèmes de stockage, la donnée est stockée sur disque ligne par ligne. Maintenant imaginons que l’on souhaite agréger la donnée, il faudra alors lire toutes les lignes, entièrement, une à une et extraire la donnée à agréger. Le stockage row-wise est une perte de temps, d’espace de stockage et de performance.

Si l’on pense maintenant en format colonne où chaque colonne et ses valeurs sont stockées au même endroit, nous n’aurons besoin d’accéder qu’à la colonne à agréger pour faire notre calcul. Le stockage colonne nous permet de gagner en efficacité et en rapidité.



= Alternatives =

Apache Parquet et Apache ORC sont des exemples populaires de formats de données en colonnes sur disque. Apache Arrow est conçu comme un complément à ces formats pour le traitement des données en mémoire. Les projets Arrow et Parquet comprennent des bibliothèques qui permettent de lire et d'écrire des données entre les deux formats. Ces projets sont donc plus complémentaires que concurrents et peuvent s'utiliser simultanément.

Apache Arrow peut être utilisé avec Apache Parquet, Apache Spark, NumPy, PySpark, Pandas et d'autres bibliothèques de traitement de données. Cependant Apache Arrow reste la solution la plus complète actuellement pour un transfert efficace de données volumineuses.

= Désavantage =

Le principal désavantage avec Apache Arrow va avec son principal avantage: il est très complet, ce qui le rend difficile à prendre en main pour les débutants malgré une communauté active et une documentation fournie.

= Référence =
 * 1) https://en.wikipedia.org/wiki/Apache_Arrow
 * 2) https://github.com/apache/arrow
 * 3) https://arrow.apache.org/
 * 4) https://blog.ippon.fr/2020/10/28/apache-arrow/
 * 5) https://big-data.developpez.com/actu/307542/Big-Data-la-plateforme-de-developpement-pour-l-analyse-in-memory-Apache-Arrow-1-0-0-est-disponible-et-s-accompagne-de-nombreuses-ameliorations/
 * 6) https://www.dremio.com/data-lake/apache-arrow/
 * 7) https://www.youtube.com/watch?v=y7zGnKzaKIw
 * 8) https://github.com/animeshtrivedi/blog/blob/master/post/2017-12-26-arrow.md

= Veille Technologique 2020 =
 * Année : VT2020
 * Sujet : Apache Arrow
 * [[Media:Présentation_Apache_Arrow.pdf|Présentation]]
 * Démonstration
 * Auteurs : Robin Delbos