Publicité
Publicité

Contenu connexe

Dernier(20)

Publicité

Hive Tuning

  1. Technique #1: USE TEZ  TEZ : Moteur d’exécution qui améliore les performances du paradigme MapReduce  Repose sur le système de DAG (à l’instar de Spark) : calcule le plan d’exécution le plus optimal pour minimiser le shuffling des données  Pour l’utiliser : set hive.execution.engine=tez;
  2. Technique #2: USE ORC OR PARQUET (1)
  3. Format : ORC  Compression efficiente : stocke par colonne et compressé, ce qui mène à de plus petites lectures disques et de meilleures performances.  Transactions ACID (atomicité, cohérence, isolation, durabilité), soit un ensemble de propriété garantissant la fiabilité d’une transaction  Souvent utilisé pour des gains de performance  A préférer pour des structures de fichiers plats
  4. Format : ORC Exemple : CREATE TABLE A_ORC ( playerID int, name string, age int ) STORED AS ORC tblproperties (“orc.compress" = “SNAPPY”);
  5. Format : PARQUET  Stocke ses éléments en arborescence tel que Google Dremel le réalise.  Compressé par défaut en Snappy (contrairement à ORC)  A préférer du format ORC lorsque les données sont imbriquées (principe de stockage en arborescence)  Ne supporte pas les transaction ACID (contrairement à l’ORC)
  6. Format : PARQUET  Exemple : CREATE TABLE A_PARQUET ( playerID int, name string, age int ) STORED AS PARQUET
  7. Technique #3: USE VECTORIZATION  Il s’agit d’une fonctionnalité de Hive qui permet de réduire les usages de CPU pour les requêtes classiques (filtres, agrégations, jointures)  Permet de traiter des batchs de lignes plutôt que des ligne par ligne  Commande : set hive.vectorized.execution.enabled = true; set hive.vectorized.execution.reduce.enabled = true;
  8. Technique #4: COST BASED QUERY OPTIMIZATION  CBO : plan d’exécution moins couteux pour chaque requête SQL. Ce plan permettra la réduction de l’allocation des ressources (CPU, Memory, I/O…),  Pour utiliser CBO, définissez les paramètres suivants : set hive.cbo.enable=true; set hive.compute.query.using.stats=true; set hive.stats.fetch.column.stats=true; set hive.stats.fetch.partition.stats=true;
  9. Technique #5 : PARTITIONNING  Accélère l’accès aux données avec des champs récurrents avec de faibles cardinalités  Exemple : CREATE TABLE mytable ( name string, city string, employee_id int ) PARTITIONED BY (year STRING, month STRING, day STRING) ;
  10. Technique #6 : BUCKETING  Bucketing( ou clustering) : fonctionnalité de Hive permettant de séparer les données en multiple fichiers ou répertoires. Utilisé pour un requêtage plus efficient. set hive.enforce.bucketing = true  Exemple : CREATE TABLE mytable ( employee_id int, name string, ) CLUSTERED BY (employee_id ) INTO 256 BUCKETS hdfs getconf -confKey dfs.blocksize
  11. Technique #6 : BUCKETING  Pour déterminer le nombre de buckets à choisir, il est intéressant de calculer le rapport entre le nombre de données et la taille des bloc HDFS. Cela permet ainsi d’éviter d’allouer de la mémoire HDFS aux fichiers qui sont pour la plupart vides.  On peut déterminer la taille des blocs HDFS via la commande suivante hdfs getconf -confKey dfs.blocksize  Ex : pour 2 TB de données, on obtient le nombre de buckets par le calcul suivant: nb_buckets = 2TB/ taille du bloc HDFS
  12. Technique #7 : OTHERS RECOMMANDATIONS  D’autres recommandations de paramètres à définir sont également préconisées(2) pour optimiser les performances de Hive :  hive.optimize.reducededuplication.min.reducer=4  hive.optimize.reducededuplication=true  hive.merge.mapfiles=true  hive.merge.mapredfiles=false  hive.merge.smallfiles.avgsize=16000000  hive.merge.size.per.task=256000000  hive.merge.sparkfiles=true  hive.auto.convert.join=true  hive.auto.convert.join.noconditionaltask=true  hive.auto.convert.join.noconditionaltask.size=20Mhive.optimize.bucketmapjoin.sortedmerge=false hive.map.aggr.hash.percentmemory=0.5 hive.map.aggr=true
  13. Technique #6 : OTHERS RECOMMANDATIONS  hive.optimize.bucketmapjoin.sortedmerge=false  hive.map.aggr.hash.percentmemory=0.5  hive.map.aggr=true  hive.stats.autogather=true  hive.stats.fetch.column.stats=true  hive.compute.query.using.stats=true  hive.limit.pushdown.memory.usage=0.4 (MR and Spark)  hive.optimize.index.filter=true  hive.auto.convert.join.noconditionaltask=true
  14. REFERENCES  (1) Hortonworks : https://fr.hortonworks.com/blog/orcfile-in-hdp-2-better-compression-better-performance  (2) Cloudera-Hive : https://www.cloudera.com/documentation/enterprise/5-9-x/PDF/cloudera-hive.pdf
Publicité