Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
#JSS2014
Les journées
SQL Server 2014
Un événement organisé par GUSS
#JSS2014
Les journées
SQL Server 2014
Un événement organisé par GUSS
Hive ou la convergence entre
datawarehouse et Big Dat...
#JSS2014
Merci à nos sponsors
#JSS2014
Speakers
Julien Buret
Directeur technique
@julienburet
David Joubert
Consultant Data & Analytics
@Dj_Uber
www.dju...
#JSS2014
On va parler de
• Un peu d’Hadoop
• Beaucoup de Hive
– Historique
– Moteurs d’exécution
– Stockage
– Optimisation...
#JSS2014
• Framework aidant au développement
d’application distribué et scalable
• Projet débuté en 2005
– Basé sur 2 papi...
#JSS2014
Map Reduce
class CompositeKeyWritableRSJ implements Writable,
WritableComparable<CompositeKeyWritableRSJ> {
// Da...
#JSS2014
• Projet interne Facebook lancé en
2007
• Opensourcé en 2009
• Aujourd’hui le standard de fait
pour exécuter du S...
#JSS2014
Hive fonctionnement globale
Block n
Block n
Block n
Block n
foo/foo1.tx
t
Hive METASTORE
FOO -> /dw/foo
select id...
#JSS2014
Interprétation SQL par Hive
Parser
Analyse
Sémantique
Générateur
plan
d’éxecution
logique
Générateur
plan
d’éxecu...
#JSS2014
M/R comme moteur d’exécution SQL
M
M
M
M
M
R
R
R
HDFS
HDFS
M
M
R HDFS M R HDFS
IO
IO
IO
#JSS2014
Hive
#JSS2014
Hive Quelle usage ?
Base de donneés Hive
Langage SQL HiveQL (SQL-92)
Update Oui Non
Delete Oui Non
Transactions O...
#JSS2014
Hive Quelle usage ?
PAS DE REQUÊTES
INTERACTIVES
Datwarehouse
DB
Log
DB
SQL/NoSQL
Réseaux
sociaux
#JSS2014
Requête interactive sur Hadoop
STINGER
#JSS2014
La fin de M/R pour le sql sur Hadoop
hive> set hive.execution.engine=tez
Et bientôt
hive> set hive.execution.engi...
#JSS2014
• MPP
• Requête SQL « interactive » sur Hadoop
• Compatible Hive
– Même API
– Partage le metastore
Impala
#JSS2014
Spark
#JSS2014
• Nouveau moteur d’exécution pour Hadoop
– Supporte M/R + Join
– Permet de construire des plans d’exécution plus
...
#JSS2014
Traitement complexe M/R
M
M
M
M
M
R
R
R
HDFS
HDFS
M
M
R HDFS M R HDFS
IO
IO
IOIO
IO
IO IO
#JSS2014
Traitement complexe M/R
M
M
M
M
M
R
R
R
HDFS
HDFS
M
M
R HDFS M R HDFS
IO
IO
IO
#JSS2014
Même traitement avec Tez
M
M
M
M
M
R
R
R
R
R HDFS
R
#JSS2014
Comparaison de performances entre
Hive en mode MapReduce et Hive en
mode Tez
#JSS2014
• Hive peut analyser des formats textuels
(CSV, texte brut avec RegEx, Json, …)
– Permet de travailler sur de la ...
#JSS2014
• SequenceFile, Avro, …
– Parsing moins couteux
• Compression par bloc de données
• Stockage adapté pour M/R
Form...
#JSS2014
Format orienté colonne
a b c
a1 b1 c1
a2 b2 c2
a3 b3 c3
a4 b4 c4
a5 b5 c5
a1 b1 c1 a2 b2 c2 a3 b3 c3
a1 a2 a3 b1 ...
#JSS2014
• ORC et Parquet
• Permet un stockage des données en
colonnes
• Améliore les performances en lecture,
écriture et...
#JSS2014
Comparaison de performances entre
stockage natif et stockage colonne
#JSS2014
• Hive traite les données ligne à ligne
– Inefficace notamment pour des agrégations
• Mais résolue dans le monde ...
#JSS2014
• Optimisation de l’arbre d’exécution
– Peu d’optimisations
• Partition pruning
• Projection pruning
• Filter pus...
#JSS2014
• Hive 0.14 with Apache Optiq
• Impala 2.0
CBO
#JSS2014
• Première optimisation
– Join reordering
Hive 0.14
SQL
parser
Semantic
Analyser
Logical
Optimizer
Physical
Optim...
#JSS2014
• Même problématique que pour une base
SQL
– Les statistiques doivent être calculé et représentative
des données
...
#JSS2014
Vectorization + CBO
#JSS2014
SQL
Langage de requêtes SQL
Traitement en mode batch
Format orienté colonne
(columnstore index, moteur
vertipaq)
...
#JSS2014
• SQL-20XX
– Supporté les fonctions analytics
– WINDOWS, ROOLUP, CUBE
• Transaction
• LLAP
• Materialized Views
•...
#JSS2014
Questions
#JSS2014#JSS2014
Prochain SlideShare
Chargement dans…5
×

JSS2014 – Hive ou la convergence entre datawarehouse et Big Data

714 vues

Publié le

Session des Journées SQL Server 2014 - David Joubert
---
Intégré par défaut sur la plateforme Hadoop, Hive est lien manquant entre SQL et Big Data dans l’éco-système.

Langage, stockage, exécution, cet entrepôt de données Big Data s’est toujours inspiré de ses équivalents relationnels dans son évolution.

Cette session sera l’occasion de faire le tour de la technologie et de démontrer cette convergence.

Publié dans : Données & analyses
  • Soyez le premier à commenter

JSS2014 – Hive ou la convergence entre datawarehouse et Big Data

  1. 1. #JSS2014 Les journées SQL Server 2014 Un événement organisé par GUSS
  2. 2. #JSS2014 Les journées SQL Server 2014 Un événement organisé par GUSS Hive ou la convergence entre datawarehouse et Big Data Julien Buret David Joubert
  3. 3. #JSS2014 Merci à nos sponsors
  4. 4. #JSS2014 Speakers Julien Buret Directeur technique @julienburet David Joubert Consultant Data & Analytics @Dj_Uber www.djuber.net
  5. 5. #JSS2014 On va parler de • Un peu d’Hadoop • Beaucoup de Hive – Historique – Moteurs d’exécution – Stockage – Optimisation de requêtes • Pas mal de démos On ne vas pas en parler • De tout le reste Autres sessions Big Data • APS, l’appliance Big Data, Lundi à 15h30 • Big Data et Real Time, Mardi à 14h Agenda
  6. 6. #JSS2014 • Framework aidant au développement d’application distribué et scalable • Projet débuté en 2005 – Basé sur 2 papiers de Google (GFS & MapReduce) • Projet Apache depuis 2009 Hadoop : un peu d’histoire
  7. 7. #JSS2014 Map Reduce class CompositeKeyWritableRSJ implements Writable, WritableComparable<CompositeKeyWritableRSJ> { // Data members private String joinKey;// EmployeeID private int sourceIndex;// 1=Employee data; 2=Salary (current) data; 3=Salary historical data public CompositeKeyWritableRSJ() { } public CompositeKeyWritableRSJ(String joinKey, int sourceIndex) { this.joinKey = joinKey; this.sourceIndex = sourceIndex; } @Override public String toString() { return (new StringBuilder().append(joinKey).append("t").append(sourceIndex)).toString(); } public void readFields(DataInput dataInput) throws IOException { joinKey = WritableUtils.readString(dataInput); sourceIndex = WritableUtils.readVInt(dataInput); } public void write(DataOutput dataOutput) throws IOException { WritableUtils.writeString(dataOutput, joinKey); WritableUtils.writeVInt(dataOutput, sourceIndex); } public int compareTo(CompositeKeyWritableRSJ objKeyPair) { int result = joinKey.compareTo(objKeyPair.joinKey); if (0 == result) { result = Double.compare(sourceIndex, objKeyPair.sourceIndex); } return result; } public String getjoinKey() { return joinKey; } public void setjoinKey(String joinKey) { this.joinKey = joinKey; } public int getsourceIndex() { return sourceIndex; } public void setsourceIndex(int sourceIndex) { this.sourceIndex = sourceIndex; } } public class MapperRSJ extends Mapper<LongWritable, Text, CompositeKeyWritableRSJ, Text> { CompositeKeyWritableRSJ ckwKey = new CompositeKeyWritableRSJ(); Text txtValue = new Text(""); int intSrcIndex = 0; StringBuilder strMapValueBuilder = new StringBuilder(""); List<Integer> lstRequiredAttribList = new ArrayList<Integer>(); @Override protected void setup(Context context) throws IOException, InterruptedException { // {{ // Get the source index; (employee = 1, salary = 2) // Added as configuration in driver FileSplit fsFileSplit = (FileSplit) context.getInputSplit(); intSrcIndex = Integer.parseInt(context.getConfiguration().get( fsFileSplit.getPath().getName())); // }} // {{ // Initialize the list of fields to emit as output based on // intSrcIndex (1=employee, 2=current salary, 3=historical salary) if (intSrcIndex == 1) // employee { lstRequiredAttribList.add(2); // FName lstRequiredAttribList.add(3); // LName lstRequiredAttribList.add(4); // Gender lstRequiredAttribList.add(6); // DeptNo } else // salary { lstRequiredAttribList.add(1); // Salary lstRequiredAttribList.add(3); // Effective-to-date (Value of // 9999-01-01 indicates current // salary) } // }} } public class ReducerRSJ extends Reducer<CompositeKeyWritableRSJ, Text, NullWritable, Text> { StringBuilder reduceValueBuilder = new StringBuilder(""); NullWritable nullWritableKey = NullWritable.get(); Text reduceOutputValue = new Text(""); String strSeparator = ","; private MapFile.Reader deptMapReader = null; Text txtMapFileLookupKey = new Text(""); Text txtMapFileLookupValue = new Text(""); @Override protected void setup(Context context) throws IOException, InterruptedException { // {{ // Get side data from the distributed cache Path[] cacheFilesLocal = DistributedCache.getLocalCacheArchives(context .getConfiguration()); for (Path eachPath : cacheFilesLocal) { if (eachPath.getName().toString().trim() .equals("departments_map.tar.gz")) { URI uriUncompressedFile = new File(eachPath.toString() + "/departments_map").toURI(); initializeDepartmentsMap(uriUncompressedFile, context); } } // }} }
  8. 8. #JSS2014 • Projet interne Facebook lancé en 2007 • Opensourcé en 2009 • Aujourd’hui le standard de fait pour exécuter du SQL sur Hadoop • Disponible sur toute les distributions populaires Hive : un peu d’histoire
  9. 9. #JSS2014 Hive fonctionnement globale Block n Block n Block n Block n foo/foo1.tx t Hive METASTORE FOO -> /dw/foo select id, count(0) from FOO group by id 1. Créer des jobs en se servant des metadonnées 2. Génère et soumet le traitement au cluster task task task task Hive DRIVER
  10. 10. #JSS2014 Interprétation SQL par Hive Parser Analyse Sémantique Générateur plan d’éxecution logique Générateur plan d’éxecution physique HiveQL AST QB Operator Tree Task Tree
  11. 11. #JSS2014 M/R comme moteur d’exécution SQL M M M M M R R R HDFS HDFS M M R HDFS M R HDFS IO IO IO
  12. 12. #JSS2014 Hive
  13. 13. #JSS2014 Hive Quelle usage ? Base de donneés Hive Langage SQL HiveQL (SQL-92) Update Oui Non Delete Oui Non Transactions Oui Non Index Extensive Non / Limité Latence Très faible Elevée Volume de données To Po Gestion des données Validation à l’ecriture, contrainte « schema on read »
  14. 14. #JSS2014 Hive Quelle usage ? PAS DE REQUÊTES INTERACTIVES Datwarehouse DB Log DB SQL/NoSQL Réseaux sociaux
  15. 15. #JSS2014 Requête interactive sur Hadoop STINGER
  16. 16. #JSS2014 La fin de M/R pour le sql sur Hadoop hive> set hive.execution.engine=tez Et bientôt hive> set hive.execution.engine=spark
  17. 17. #JSS2014 • MPP • Requête SQL « interactive » sur Hadoop • Compatible Hive – Même API – Partage le metastore Impala
  18. 18. #JSS2014 Spark
  19. 19. #JSS2014 • Nouveau moteur d’exécution pour Hadoop – Supporte M/R + Join – Permet de construire des plans d’exécution plus complexe que M/R • Pipelining • Utilisation de la mémoire à la place du disque • Multiple Reduce Stage Tez
  20. 20. #JSS2014 Traitement complexe M/R M M M M M R R R HDFS HDFS M M R HDFS M R HDFS IO IO IOIO IO IO IO
  21. 21. #JSS2014 Traitement complexe M/R M M M M M R R R HDFS HDFS M M R HDFS M R HDFS IO IO IO
  22. 22. #JSS2014 Même traitement avec Tez M M M M M R R R R R HDFS R
  23. 23. #JSS2014 Comparaison de performances entre Hive en mode MapReduce et Hive en mode Tez
  24. 24. #JSS2014 • Hive peut analyser des formats textuels (CSV, texte brut avec RegEx, Json, …) – Permet de travailler sur de la donnée brut (log, export d’API, …) • Parsing couteux • Problème de la compression Hive sur donnée brut
  25. 25. #JSS2014 • SequenceFile, Avro, … – Parsing moins couteux • Compression par bloc de données • Stockage adapté pour M/R Format Binaire
  26. 26. #JSS2014 Format orienté colonne a b c a1 b1 c1 a2 b2 c2 a3 b3 c3 a4 b4 c4 a5 b5 c5 a1 b1 c1 a2 b2 c2 a3 b3 c3 a1 a2 a3 b1 b2 b3 c1 c2 c3 Représentation logique des données Stockage ligne Stockage colonne Metadata + Encoding + Compression
  27. 27. #JSS2014 • ORC et Parquet • Permet un stockage des données en colonnes • Améliore les performances en lecture, écriture et traitement • Optimisation du stockage grâce à la compression induite par le format Format orienté colonne
  28. 28. #JSS2014 Comparaison de performances entre stockage natif et stockage colonne
  29. 29. #JSS2014 • Hive traite les données ligne à ligne – Inefficace notamment pour des agrégations • Mais résolue dans le monde « SQL » par la Vectorization • Contribution hortonwork + microsoft sur Hive – Modification du Query Engine pour traiter des « vecteurs de colonnes » – Meilleur utilisation du CPU et des caches Vectorisation
  30. 30. #JSS2014 • Optimisation de l’arbre d’exécution – Peu d’optimisations • Partition pruning • Projection pruning • Filter push down • Pas d’optimisation lié à la donnée – Ordre des tables dans les jointures importants – Pas de hint Hive < 0.14 : RBO
  31. 31. #JSS2014 • Hive 0.14 with Apache Optiq • Impala 2.0 CBO
  32. 32. #JSS2014 • Première optimisation – Join reordering Hive 0.14 SQL parser Semantic Analyser Logical Optimizer Physical Optimizer Map Reduce Translate Optiq AST optimisé
  33. 33. #JSS2014 • Même problématique que pour une base SQL – Les statistiques doivent être calculé et représentative des données Hive : Calcul des statistiques
  34. 34. #JSS2014 Vectorization + CBO
  35. 35. #JSS2014 SQL Langage de requêtes SQL Traitement en mode batch Format orienté colonne (columnstore index, moteur vertipaq) Moteur d’exécution basé sur des statistiques Hive Langage de requêtes HiveQL Vectorisation Format ORC (oriented row columnar) Query planner Pourquoi parler de convergence ?
  36. 36. #JSS2014 • SQL-20XX – Supporté les fonctions analytics – WINDOWS, ROOLUP, CUBE • Transaction • LLAP • Materialized Views • Requête multi-datasource – Prestodb (Facebook) – APS PolyBase – Oracle Bigdata Le futur du SQL sur Hadoop
  37. 37. #JSS2014 Questions
  38. 38. #JSS2014#JSS2014

×