SQL-on-Hadoop

= Présentation =
 * Enseignants : Georges-Pierre Bonneau, Didier Donsez (VT2015)
 * Sujet : SQL-on-Hadoop
 * Date : 23 octobre 2015
 * Auteur : Guo Kai

=Résumé= SQL-On-HADOOP est une classe des outils logiciels analytiques qui combinent les interrogations de SQL-style établies avec les composants du Hadoop data framwork récent.

=Abstract= SQL-on-Hadoop is a class of analytical application tools that combine established SQL-style querying with newer Hadoop data framework elements.

=Mots clefs= SQL, Hadoop, MapReduce, SQL Connecters, Hadoop Cluster, Data Node, Task Tracker, Name Node

=Synthèse=

Pourquoi SQL-on-Hadoop
La technologie Hadoop est conçue pour traiter les big data qui offre aux entreprises un moyen rentable pour stocker et analyser les données du grand nombre. Les entreprises cherchent à utiliser Hadoop pour augmenter leur entrepôt de données traditionnel. Par rapport aux solutions traditionnelles d'entrepôt de données, Hadoop peut se varier par rapport au matériel et peut être utilisé pour stocker les données structurées ainsi que les données non structurées. Entrepôts de données traditionnels basés sur les technologies de base de données relationnelles existent depuis longtemps et ont un ensemble d'outils matures pour la requête et l'analyse. Les utilisateurs professionnels utilisent SQL comme langage de requête pour exécuter des requêtes ad hoc au lieu des entrepôts existants. En outre, des outils de reporting comme Cognos, Business Objects, MicroStrategy comptent sur SQL lourdement. La valeur importante de Hadoop se réalise lorsque les utilisateurs peuvent accéder et effectuer des données ad-hoc requêtées directement sur Hadoop en utilisant des outils qui supportent SQL.

Introduction brève de Hadoop
Hadoop est un framework Java libre destiné à faciliter la création d'applications distribuées et échelonnables (scalables), permettant aux applications de travailler avec des milliers de nœuds et des pétaoctets de données. Hadoop a été inspiré par les publications MapReduce, GoogleFS et BigTable de Google.

Hadoop a été créé par Doug Cutting et fait partie des projets de la fondation logicielle Apache depuis 2009.

Hadoop consiste de Hadoop Common package qui fournit les abstractions du niveau du système de fichier et du niveau du système d'exploitation, le moteur de MapReduce (MapReduce/MR1 ou YARN/MR2) et le Hadoop Distributed File System (HDFS).



MapReduce est un patron d'architecture de développement informatique, inventé par Google1, dans lequel sont effectués des calculs parallèles, et souvent distribués, de données potentiellement très volumineuses, typiquement supérieures en taille à 1 téraoctet.
 * MapReduce layer

MapReduce permet de manipuler de grandes quantités de données en les distribuant dans un cluster de machines pour être traitées.

Applications typically implement the Mapper and Reducer interfaces to provide the map and reduce methods. These form the core of the job. Les applications implémentent typiquement les interfaces Mapper et Reducer pour fournir les méthodes map et reduce qui forment le corps du job.

Map

Dans cette étape, le nœud analyse un problème, le découpe en sous-problèmes, et les délègue à d'autres nœuds (qui peuvent en faire de même récursivement). Les sous-problèmes sont ensuite traités par les différents nœuds à l'aide de la fonction Reduce qui à un couple (clé, valeur) associe un ensemble de nouveaux couples (clé, valeur) : map(clé1,valeur1) → list(clé2,valeur2)

//En pseudo code cela donnerait Map(void * document){ int cles = 1; for each mot m in document calculIntermediaire(m,cles); }

Reducer

Vient ensuite l'étape Reduce, où les nœuds les plus bas font remonter leurs résultats au nœud parent qui les avait sollicités. Celui-ci calcule un résultat partiel à l'aide de la fonction Reduce (réduction) qui associe toutes les valeurs correspondantes à la même clé à une unique paire (clé, valeur). Puis il remonte l'information à son tour.

//En pseudo code cela donnerait Reduce(entier cles, Iterator values){ int result = 0; for each v in values result += v; }


 * HDFS layer

Le HDFS est un système de fichiers distribué, extensible et portable développé par Hadoop à partir du GoogleFS. Écrit en Java, il a été conçu pour stocker de très gros volumes de données sur un grand nombre de machines équipées de disques durs banalisés. Il permet l'abstraction de l'architecture physique de stockage, afin de manipuler un système de fichiers distribué comme s'il s'agissait d'un disque dur unique.

Une architecture de machines HDFS (aussi appelée cluster HDFS) repose sur deux types de composants majeurs :

NameNode (nœud de noms) : ce composant gère l'espace de noms, l'arborescence du système de fichiers et les métadonnées des fichiers et des répertoires. Il centralise la localisation des blocs de données répartis dans le cluster. Il est unique mais dispose d'une instance secondaire qui gère l'historique des modifications dans le système de fichiers (rôle de backup). Ce NameNode secondaire permet la continuité du fonctionnement du cluster Hadoop en cas de panne du NameNode d'origine ;

DataNode (nœud de données) : ce composant stocke et restitue les blocs de données. Lors du processus de lecture d'un fichier, le NameNode est interrogé pour localiser l'ensemble des blocs de données. Pour chacun d'entre-eux, le NameNode renvoie l'adresse du DataNode le plus accessible, c'est-à-dire le DataNode qui dispose de la plus grande bande passante. Les DataNodes communiquent de manière périodique au NameNode la liste des blocs de données qu'ils hébergent. Si certains de ces blocs ne sont pas assez répliqués dans le cluster, l'écriture de ces blocs s'effectue en cascade par copie sur d'autres.

SQL-on-Hadoop
Les entreprises utilisent Hadoop comme un répertoire de données central pour toutes leurs données provenant des sources diverses, y compris les systèmes opérationnels, les médias sociaux et le Web, des capteurs et des dispositifs intelligents, ainsi que leurs applications. Divers frameworks de Hadoop sont utilisés pour gérer et exécuter des analyses profondes afin d'obtenir des aperçus actionnables à partir des données, y compris l'analyse de texte sur le texte non structuré, l'analyse de log pour les données semi-structurées, ainsi que le traitement de données relationnelle en SQL sur les données semi-structurées et structurées. Le traitement de SQL, en particulier, a gagné un traction important, car de nombreux outils de gestion de données d'entreprise reposent sur SQL, et de nombreux utilisateurs de l'entreprise sont à l'aise avec elle. En conséquence, le nombre de systèmes SQL-sur-Hadoop ont augmenté de manière significative. Nous pouvons classer ces systèmes dans deux catégories générales:

Système native basés sur Hadoop, et les hybrides de base de données Hadoop. Dans la première catégorie, Hive est le premier système de type SQL-on-Hadoop, qui utilise un autre framework comme MapReduce et Tez pour traiter les requêtes de type SQL, utilisant ses fonctionnalités de planification de tâche et chargement des caractéristiques de l'équilibrage-Shark comme son runtime. Dans cette catégorie, Impala immigré de MapReduce à une architecture de base de données parallèle "shared-nothing". Impala exécute des requêtes en utilisant ses propres démons de longue durée en cours d'exécution sur tous les HDFS DataNode, et au lieu de matérialiser les résultats intermédiaires, les coordonner pendant la phase de calcul. Similaire à Impala, LinkedIn Tajo, Facebook Presto, et MapR Drill, ressemblent aussi à des bases de données parallèles et à utiliser les processus de durée longue et client-ciblé pour exécuter les requêtes SQL dans un mode distribué.

YARN
Le Centre d'architecture du Enterprise Hadoop

Partie du noyau projet Hadoop, YARN est le centre architectural de Hadoop qui permet aux moteurs de traitement de données multiples telles que SQL interactive, streaming en temps réel, data science et le traitement de batch pour gérer les données stockées dans une plate-forme unique, déverrouillage d'une approche entièrement nouvelle d'analyse.

YARN est le fondement de la nouvelle génération de Hadoop et permet aux entreprises partout dans le monde de réaliser une architecture de données moderne.

Apache Hive
Hive est le premier système SQL-on-Hadoop construit au sommet d'Hadoop et exploite tous les avantages de Hadoop, y compris ainsi: sa capacité à l'échelle à des milliers ou des dizaines de milliers de nœuds, la tolérance de panne et haute disponibilité. Hive met en oeuvre un langage de requête SQL comme savoir HiveQL. La déclarations d'HiveQL soumises à Hive sont analysées, compilées et optimisées pour produire un plan d'exécution de la requête physique. Le plan est un graphe acyclique orienté (DAG) de tâches MapReduce qui est exécuté à travers du framework de MapReduce ou par le framework Tez dans la dernière version de Hive. Une requête HiveQL est exécuté en un seul job Tez lorsque le framework de Tez est utilisé et est généralement divisée en jobs MapReduce multiples lorsque le cadre de MapReduce est utilisé. Tez pipelines données à travers des étapes d'exécution au lieu de créer des fichiers temporaires intermédiaires. Ainsi, Tez évite les démarrage, planification et la matérialisation des frais généraux de MapReduce.

Cloudera Impala
Cloudera Impala est un autre projet open-source qui implémente les capacités de traitement de données SQL sur Hadoop, et a été inspiré par Dremel de Google. Impala supporte un langage de requête SQL-like qui est ainsi un sous-ensemble de SQL. Par opposition à Hive, au lieu de compter sur un autre cadre, Impala fournit ses propres démons d'exécution longue sur chaque nœud du cluster et possède une architecture de base de données parallèle partagée rien. Le processus principal de démon impalad comprend le planificateur de requêtes, coordinateur de la requête, le moteur d'exécution de la requête. Impala supporte deux types d'algorithmes de jointure: partitionné et broadcast, qui sont respectivement similaires à la jointure re-partitionnée de Hive et la map-side jointure. Impala compile toutes les requêtes dans un plan d'exécution en pipeline.

Apache Drill
Drill est un moteur de requête SQL open-source Apache pour l'exploration Big Data. Drill est conçu à partir du sol pour appuyer l'analyse de haute performance sur les données semi-structurées et l'évolution rapide des applications provenant de Big Data modernes, tout en offrant la familiarité et de l'écosystème de la norme ANSI SQL, le langage de requête standard de l'industrie. Drill fournit intégration plug-and-play avec Apache Hive existant et les déploiements d'Apache Hbase.

=Notes et Références=