38
#JSS2014 es journées SQL Server 2014 n événement organisé par GUSS

Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

Embed Size (px)

Citation preview

Page 1: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

Les journées

SQL Server 2014

Un événement organisé par GUSS

Page 2: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

Les journées

SQL Server 2014

Un événement organisé par GUSS

Hive ou la convergence entre datawarehouse et Big Data

Julien BuretDavid Joubert

Page 3: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

Merci à nos sponsors

Page 4: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

Speakers

Julien BuretDirecteur technique

@julienburet

David JoubertConsultant Data & Analytics

@Dj_Uber

www.djuber.net

Page 5: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#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

Page 6: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#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

Page 7: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

Map Reduceclass 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); } } // }} }

Page 8: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#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

Page 9: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

Hive fonctionnement globale

Block n

Block n

Block n

Block n

foo/foo1.txt

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

Page 10: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#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

Page 11: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#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

Page 12: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

demoHive

Page 13: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#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 »

Page 14: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

Hive Quelle usage ?

PAS DE REQUÊTES INTERACTIVES

Datwarehouse

DB

Log

DBSQL/

NoSQL

Réseaux

sociaux

Page 15: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

Requête interactive sur Hadoop

STINGER

Page 16: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

La fin de M/R pour le sql sur Hadoop

hive> set hive.execution.engine=tez

Et bientôthive> set

hive.execution.engine=spark

Page 17: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

• MPP• Requête SQL « interactive » sur

Hadoop• Compatible Hive

– Même API– Partage le metastore

Impala

Page 18: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

Spark

Page 19: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#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

Page 20: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

Traitement complexe M/RM

M

M

M

M

R

R

R

HDFS

HDFS

M

M

R HDFS M R HDFS

IO

IO

IO

IO

IO

IO

IO

Page 21: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

Traitement complexe M/RM

M

M

M

M

R

R

R

HDFS

HDFS

M

M

R HDFS M R HDFS

IO

IO

IO

Page 22: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

Même traitement avec TezM

M

M

M

M

R

R

R

R

R HDFS

R

Page 23: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

demoComparaison de performances entre Hive en mode MapReduce et Hive en mode Tez

Page 24: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#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

Page 25: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

• SequenceFile, Avro, …– Parsing moins couteux

• Compression par bloc de données• Stockage adapté pour M/R

Format Binaire

Page 26: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#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

Page 27: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#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

Page 28: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

demoComparaison de performances entre stockage natif et stockage colonne

Page 29: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#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

Page 30: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#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

Page 31: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

• Hive 0.14 with Apache Optiq• Impala 2.0

CBO

Page 32: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

• Première optimisation – Join reordering

Hive 0.14

SQLparser

Semantic

Analyser

LogicalOptimiz

er

PhysicalOptimiz

er

Map Reduce

Translate

Optiq

AST optimisé

Page 33: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#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

Page 34: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

demoVectorization + CBO

Page 35: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

SQLLangage de requêtes SQLTraitement en mode batchFormat orienté colonne (columnstore index, moteur vertipaq)Moteur d’exécution basé sur des statistiques

HiveLangage de requêtes HiveQLVectorisationFormat ORC (oriented row columnar)

Query planner

Pourquoi parler de convergence ?

Page 36: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#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

Page 37: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014

Questions

Page 38: Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data

#JSS2014#JSS2014