HyperLogLog
Florent Le Gall @flornt
Développeur Full Stack
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
2
• L’algorithme démystifié
• Le principe mathématique
...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
3
• Un algorithme pour compter les
occurrences uniques
...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
4
• 1, 2, 3, …
Compter c’est facile !
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
5
• La méthode naïve :
• Set<String> counter = new Hash...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
6
• Avantages
• Le résultat est exact
• Inconvénients
•...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
7
• Ne pas stocker les mots, stocker
uniquement les val...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
8
• Pour chaque mot : on calcule sa valeur de
hachage
•...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
9
• Nécessite de bien dimensionner le tableau
• Si trop...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
10
L’approche probabiliste
0101XY…
1111XY…
0100XY…
0000...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
11
L’approche probabiliste
0101XY…
1111XY…
0100XY…
0000...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
12
• Pour chaque mot
• On calcule sa valeur de hachage
...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
13
• Oui, mais c’est très grossier !
• Il suffit d’une ...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
14
• Distribuer l’erreur sur plusieurs registres
• Pour...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
15
*LogLog
000110101011001100101 00011001
Pour une vale...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
16
*LogLog
Pour la valeur
5
4
5
6
3
4
5
6
3
6
5
4
3
5
6...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
17
*LogLog
5
4
5
6
3
5
5
6
3
6
5
4
3
5
6
5
On détermine...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
18
• LogLog utilise la moyenne arithmétique
LogLog
• n ...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
19
• HyperLogLog utilise la moyenne
harmonique
HyperLog...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
20
• LogLog :
• Pour m registres : Précision: 1.30/Sqrt...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
21
Fusionner deux compteurs
5
4
5
6
3
4
+
3
5
3
7
4
5
5...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
22
Fusionner deux compteurs
• Permet de répartir le déc...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
23
Des algorithmes récents
• LogLog
• Publié en 2003 pa...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
24
• Présentation à Devoxx de DuyHai DOAN
• http://cfp....
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
25
Vous avez une heure !
• Scala or Java choose your we...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
26
• C’est puissant, c’est très approprié si vos
donnée...
• EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS
27
Questions
?
Merci!
Prochain SlideShare
Chargement dans…5
×

Hyper LogLog

450 vues

Publié le

HyperLogLog presentation & hands-on at Xebia XKE !

Publié dans : Logiciels
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
450
Sur SlideShare
0
Issues des intégrations
0
Intégrations
21
Actions
Partages
0
Téléchargements
4
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Hyper LogLog

  1. 1. HyperLogLog Florent Le Gall @flornt Développeur Full Stack
  2. 2. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 2 • L’algorithme démystifié • Le principe mathématique • Les différentes étapes • Son implémentation guidée par les tests • Hands-on en Scala ou en Java HyperAgendaAgenda
  3. 3. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 3 • Un algorithme pour compter les occurrences uniques • Combien d’adresses IPs uniques dans mes logs ? • Combien de mots dans toutes les oeuvres de Shakespeare ? HyperLogLog
  4. 4. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 4 • 1, 2, 3, … Compter c’est facile !
  5. 5. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 5 • La méthode naïve : • Set<String> counter = new HashSet<>() • counter.add(sheep1); • counter.add(sheep2); • …. • counter.add(sheep1337); • return counter.size() Compter c’est facile !
  6. 6. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 6 • Avantages • Le résultat est exact • Inconvénients • Nécessite de stocker toutes les occurrences uniques • Difficile à répartir sans répliquer plein de données ! La méthode naïve
  7. 7. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 7 • Ne pas stocker les mots, stocker uniquement les valeurs de hachage • Assez peu économe, on a toujours besoin d’autant de valeurs que de mots Comment stocker moins ?
  8. 8. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 8 • Pour chaque mot : on calcule sa valeur de hachage • On stocke la présence ou l’absence de la valeur de hachage dans un tableau de bits. • À la position donnée par les N-premiers bits de la valeur de hachage • Il suffit à la fin de compter le nombre de valeurs marquées L’approche Bitmap
  9. 9. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 9 • Nécessite de bien dimensionner le tableau • Si trop petit : on va avoir beaucoup de collisions et des résultats complètement faux • Il faut connaître à l’avance une approximation de ce qu’on cherche :( L’approche Bitmap
  10. 10. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 10 L’approche probabiliste 0101XY… 1111XY… 0100XY… 0000XY… 1110XY… 0110XY… 0111XY… 1000XY… 1001XY… 0011XY… 1011XY… 0001XY… 1100XY… 1101XY… 0010XY… 1010XY… Soit un ensemble de nombres aléatoires 0000XY On a une probabilité de 1/16 de trouver un nombre qui commence par 0000
  11. 11. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 11 L’approche probabiliste 0101XY… 1111XY… 0100XY… 0000XY… 1110XY… 0110XY… 0111XY… 1000XY… 1001XY… 0011XY… 1011XY… 0001XY… 1100XY… 1101XY… 0010XY… 1010XY… À l’inverse 0000XY On rencontre un seul nombre commençant par 4 zéros La cardinalité de l’ensemble est probablement de 16 : (2^4)
  12. 12. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 12 • Pour chaque mot • On calcule sa valeur de hachage • On compte le nombre de zéros au début de cette valeur • On conserve le nombre de zéros le plus élevé parmi toutes les valeurs rencontrées • Une approximation grossière est : L’approche probabiliste
  13. 13. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 13 • Oui, mais c’est très grossier ! • Il suffit d’une seule valeur de hachage très basse pour déterminer la cardinalité • La précision est plutôt faible : 32 valeurs possibles pour 4 milliard de résultats • Le résultat est exponentiel • La marge d’erreur est élevée L’approche probabiliste
  14. 14. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 14 • Distribuer l’erreur sur plusieurs registres • Pour chaque valeur de hachage : • Lui attribuer un registre • Compter le nombre de zéros au début de la valeur • Retenir le maximum du nombre de zéros par registre • Faire la moyenne des registres ! Comment faire mieux ?
  15. 15. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 15 *LogLog 000110101011001100101 00011001 Pour une valeur de hachage donnée On détermine la position du premier 1 (ici 4) On obtient l’index à utiliser (ici 25) N bits pour l’index, soit 2^N registres
  16. 16. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 16 *LogLog Pour la valeur 5 4 5 6 3 4 5 6 3 6 5 4 3 5 6 5 On détermine son registre On détermine la position du 1er “1” firstOneRank = 5 register(5) = max(register(5), firstOneRank) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 registerIndex = 5 000010101011001100101 0101
  17. 17. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 17 *LogLog 5 4 5 6 3 5 5 6 3 6 5 4 3 5 6 5 On détermine son registre On détermine la position du 1er “1” firstOneRank = 5 register(5) = max(register(5), firstOneRank) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 registerIndex = 5 On met à jour le registre Pour la valeur 000010101011001100101 0101
  18. 18. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 18 • LogLog utilise la moyenne arithmétique LogLog • n : le nombre de registres • register_i : la valeur du registre i • biasCorrection : la constante de correction
  19. 19. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 19 • HyperLogLog utilise la moyenne harmonique HyperLogLog • n : le nombre de registres • register_i : la valeur du registre i • biasCorrection : la constante de correction
  20. 20. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 20 • LogLog : • Pour m registres : Précision: 1.30/Sqrt(m) • 1024 registres (1ko) -> 4% d’erreur • HyperLogLog : • Pour m registres : Précision: 1.04/Sqrt(m) • 512 registres (1ko) -> 4% d’erreur Est-ce que ça marche bien ?
  21. 21. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 21 Fusionner deux compteurs 5 4 5 6 3 4 + 3 5 3 7 4 5 5 5 5 7 4 5 = • La fusion (+) est une opération associative • Le compteur vide est un élément neutre • C’est donc un …. • Monoïde !! max(a,b)
  22. 22. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 22 Fusionner deux compteurs • Permet de répartir le décompte sur plusieurs environnements • Chaque environnement remplit ses registres • Les registres sont fusionnés plus tard • Peu de données sont à transférer : juste un set de registres
  23. 23. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 23 Des algorithmes récents • LogLog • Publié en 2003 par Marianne Durand & Philippe Flajolet (INRIA) • HyperLogLog • Publié en 2007 par Philippe Flajolet, Eric Fusy, Olivier Gandouet et Frédéric Meunier (INRIA / LIRMM)
  24. 24. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 24 • Présentation à Devoxx de DuyHai DOAN • http://cfp.devoxx.fr/2015/talk/HLV-3716/Algorithmes_distribues_pour_le_Big_Data • Les papiers sur l’algorithme : • LogLog : http://algo.inria.fr/flajolet/ Publications/DuFl03.pdf • HyperLogLog : http://algo.inria.fr/flajolet/ Publications/FlFuGaMe07.pdf Pour approfondir
  25. 25. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 25 Vous avez une heure ! • Scala or Java choose your weapon ! • https://github.com/flegall/xke-hyperloglog
  26. 26. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 26 • C’est puissant, c’est très approprié si vos données sont réparties • Même si c’est simple, ne les implémentez pas vous-même: il y’a pas mal d’implémentations déjà écrites • https://github.com/twitter/algebird (utilisé par Spark) Pour conclure
  27. 27. • EBIA ALLIANCE = XEBIA + XEBIALABS + THIGA + UX REPUBLIC + AKAMIS 27 Questions ?
  28. 28. Merci!

×