SQL-on-Hadoop

From air
Jump to navigation Jump to search

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).

Fig. 1 : Architecture de Hadoop
  • MapReduce layer

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 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é.

Notes et Références