VT2020-AppachePinot-Fiche

= Abstract =



«''Pinot is a real-time distributed OLAP datastore, built to deliver scalable real-time analytics with low latency. It can ingest from batch data sources as well as stream data sources (such as Apache Kafka). Pinot was built by engineers at LinkedIn and is designed to scale up and out with no upper bound. Performance always remains constant based on the size of your cluster and an expected query per second (QPS) threshold.''» - Documentation officielle de Apache Pinot

= Apache Pinot=

Présentation
Pinot est conçu pour exécuter des requêtes OLAP en temps réel avec une latence faible sur des quantités massives de données et d’événements. En plus de l’ingestion en temps réel, Pinot prend également en charge les cas d’utilisation par lots avec les mêmes garanties de faible latence. Il est utilisé lorsque des analyses rapides sont nécessaires sur des données immuables, éventuellement, avec l’ingestion de données en temps réel. Pinot fonctionne très bien pour interroger les données de séries chronologiques avec beaucoup de dimensions et de métriques.

Il faut aussi noter que Pinot ne remplace pas une base de données, c’est-à-dire qu’il ne peut pas être utilisée comme source de stockage ni modifier les données(c'est une technologie permettant d'effectuer des analyses de données multidimensionnelles au sein de bases de données créées à cet effet). Bien que Pinot supporte la recherche de texte, ce n’est pas un remplacement pour un moteur de recherche.

Pour qui Pinot à été conçu ?
De plus Pour certains type de business la relation données/temps est très importantes. En effet récupérer des analyses concernant des données qui ont été collectées il y a plusieurs heures/jours est parfois beaucoup trop long. Dans certains cas comme dans la restauration par exemple il faut récupérer et analyser les données en temps réel pour pouvoir répondre à certains besoins/pouvoir régler certains problèmes. Apache Pinot va aussi permettre non seulement au gérant de la plateforme de profiter du traitement/analyse des données en temps réel mais aussi à tout les utilisateurs. On peut donc dire que cette technologie a été pensée pour gérer en temps réel une très grande quantité de donnée avec de nombreuses dimensions et métriques pour un grand nombres d’utilisateur.

= Fonctionement=

Moèle de stockage
Table :

Tout comme les bases de données traditionnelles Pinot utilise le concept de tabe.Une table est une construction qui se compose de colonnes et de lignes qui sont interrogées en utilisant SQL. Une table est associée à un schéma qui définit les colonnes de la table ainsi que leurs types de données.

Segment :

Pinot a une architecture de systèmes distribués qui s’étend horizontalement et la taille des tables doit pouvoir augmenter à l'infini. Pour parvenir, toutes les données doivent être réparties sur plusieurs nœuds. Pinot y parvient en découpant les données en segments plus petits.Les segments sont en fait de petits morceux de tables.

Tenant :

Une table est associée à un tenant. Cela permet à toutes les tables appartenant à un espace de noms logique particulier d’être regroupées sous un seul nom de tenant et être isolées des autres tenant. Cette isolation entre les tenant fournit différents espaces de noms pour les applications et les équipes pour empêcher le partage de tables ou de schémas. On peut exploiter un seul cluster et l’étendre au fur et à mesure que de nouveaux tenant augmentent le volume global de requêtes. Les développeurs peuvent gérer leurs propres schémas et tableaux sans être impactés par un autre tenant sur le cluster.

Cluster :

Logiquement, un cluster est simplement un groupe de tenant. En général, il n’y a qu’un seul cluster par environnement/centre de données. Il n’est pas nécessaire de créer plusieurs clusters puisque Pinot utilise un système de tenant. Sur LinkedIn, le plus grand cluster de Pinot se compose de plus de 1000 nœuds répartis dans un centre de données. Le nombre de nœuds dans un cluster peut être ajouté de manière à augmenter de manière linéaire les performances et la disponibilité des requêtes. Celà fait de Pinot une technologie très polyvalente et adaptative.

Composants


Un cluster Pinot est composé de quatres types de composents différents :


 * Servers
 * Brokers
 * Controllers
 * Minions

Controller :

Un contrôleur est l’orchestrateur de base qui gère la cohérence et le routage dans un cluster Pinot. Les contrôleurs sont utilisés en tant que composant indépendant et ont une visibilité de l’état de tous les autres composants dans un cluster. Le contrôleur réagit et répond aux changements d’état dans le système et planifie l’allocation des ressources pour les tableaux, les segments ou les nœuds. On peut dire qu'il s'occupe du cluster dans son ensemble.

Broker :

Un Broker reçoit les requêtes d’un client et les redirige vers un ou plusieurs serveurs Pinot avant de renvoyer une réponse.

Server :

Les serverurs gèrent les segments qui sont programmés et alloués sur plusieurs nœuds et routés sur une affectation à un locataire (il y a un seul locataire par défaut). Un serveur peut être un serveur en temps réel ou un serveur hors ligne.

Un serveur en temps réel et hors ligne ont des besoins d’utilisation de ressources très différents, en effet les serveurs en temps réel consomment continuellement de nouveaux messages provenant de systèmes externes qui sont ingérés et alloués sur des segments d’un locataire. Pour cette raison, l’isolement des ressources peut être utilisé pour hiérarchiser les flux de données en temps réel à haut débit qui sont ingérés et ensuite mis à la disposition des requêtes par l’intermédiaire d’un broker.

Minion :

Pinot minion est un composant optionnel qui peut être utilisé pour exécuter des tâches d’arrière-plan telles que "purge" pour le RGPD (Règlement Général sur la Protection des Données). Les enregistrements contenant des données privées sensibles doivent être purgés sur demande. Minion fournit à cet effet une solution conforme au RGPD tout en optimisant les segments Pinot.

= Exemples d'utilisation =

Uber eats
Uber eats à créé UberEats Rstaurent Manager qui est un dashboard d'analyse de données très complet qui permet au propriétaire d'un établissement de restauration de connaître toutes les données relatives aux commandes liées à UberEats. Celà permet par exemple de récupérer des données concernant des informations relatives à la satisfaction client, aux menus les plus populaires, aux ventes ou à la qualité du service. Grâce à la technologie Apache Pinot il est donc possible à tout moment de savoir pour le gérant le niveau de traffic relatif à UberEats pour son restaurent. En effet il a instantanement' accès à des données qui lui permette de mieux prévoir et gérer des évènements comme une brusque augmentation de commande par exemple.

LikedIn
C’est LinkedIn qui a développé Apache Pinot en 2014 et c’est maintenant  le système par défaut pour toutes les analyses de données dont le réseau social à besoin. Si vous avez déjà utilisé LinkedIn vous avez forcément déjà interagie avec Apache Pinot. C’est ce dernier qui gère le système de « Qui a vu mon profile », système qui permet de savoir qui a visionner votre profile dernièrement ( même dans les dernières seconde ). Beaucoup d’autres fonctionnalités de LinkedIn sont gérées grâce à Pinot comme le système d’analyse des posts ou encore celui de « Talent Insght ».



= Alternative =

Dans son domaine spécifique Apache Pinot n'a pas d'autre alternative. Nous pouvons tout de même parler de technologies similaires comme Presto qui est utilisé par Facebook ou encore Netflix. Presto est un moteur de recherche SQL optimisé pour les intéractions en temps réel ( d'ou la similarité avec Pinot ), cependant bien qu'il soit plus flexible que Pinot concernant les données ingéré la latence est beaucoup plus élevé que sur Pinot. Pour finir la principale différence réside dans le fait que Presto ne gère pas du tout l'analyse des données coté utilisateur.

= Demonstration =

Cliquer sur le lien ci-dessous pour avoir accès à la démonstration :

Démonstration

= Sources =
 * 1) https://docs.pinot.apache.org/
 * 2) https://www.youtube.com/watch?v=cNnwMF0pOJ8]
 * 3) https://www.youtube.com/watch?v=mRkWT_EU99M
 * 4) https://medium.com/@gowthamy/big-data-battle-batch-processing-vs-stream-processing-5d94600d8103
 * 5) https://github.com/zzhang5/zooinspector
 * 6) https://github.com/npawar/pinot-tutorial
 * 7) https://github.com/apache/incubator-pinot
 * 8) https://pinot.apache.org/
 * 9) https://docs.pinot.apache.org/basics/getting-started

= Veille Technologique 2020 =
 * Année : VT2020
 * Sujet : Apache Pinot
 * Slides : [[Media:VT2020-AppachePinot-Présentaion.pdf|Slides]]
 * Auteur : RUZAFA Rémy