HBase
 sql >> Base de données >  >> NoSQL >> HBase

Présentation des politiques de partition de compactage Apache HBase Medium Object Storage (MOB)

Présentation

La fonctionnalité Apache HBase Medium Object Storage (MOB) a été introduite par HBASE-11339. Cette fonctionnalité améliore l'accès en lecture et en écriture à faible latence pour les valeurs de taille moyenne (idéalement de 100 Ko à 10 Mo sur la base des résultats de nos tests), ce qui la rend bien adaptée au stockage de documents, d'images et d'autres objets de taille moyenne [1]. La fonctionnalité Apache HBase MOB réalise cette amélioration en séparant les chemins d'E/S pour les références de fichiers et les objets MOB, en appliquant différentes politiques de compactage aux MOB et en réduisant ainsi l'amplification d'écriture créée par les compactages de HBase. Les objets MOB sont stockés dans une région spéciale, appelée région MOB. Les objets MOB pour une table sont stockés dans la région MOB en tant que fichiers MOB, ce qui signifie qu'il y aura beaucoup de fichiers MOB dans cette région. Veuillez consulter la figure 1 de [1] pour l'architecture Apache HBase MOB.

Figure 1 Architecture Apache HBase MOB

Initialement, les fichiers MOB sont relativement petits (moins de 1 ou 2 blocs HDFS). Pour améliorer l'efficacité d'Apache HDFS, les fichiers MOB sont périodiquement fusionnés dans des fichiers plus volumineux via une opération appelée Compaction MOB , qui est indépendant du processus normal de compactage. La version initiale du compactage MOB réécrit les multiples fichiers MOB d'un jour particulier en fichiers MOB plus volumineux pour ce jour. Utilisons l'exemple de liste de fichiers ci-dessous pour clarifier cela. La table t1 a deux régions (r1, r2), elle a une famille de colonnes (f1) et MOB activé. Vous pouvez voir qu'il y a deux préfixes; D279186428a75016b17e4df5ea43d080 correspond à la valeur de hachage de la clé de démarrage pour la région r1 et D41d8cd98f00b204e9800998ecf8427e à la valeur de hachage de la clé de démarrage pour la région r2. Pour la région r1, il existe deux fichiers MOB, chacun le 01/01/2016 et le 02/01/2016, et pour la région r2, il existe 3 fichiers MOB le 01/01/2016 sous la région MOB, qui est /hbase/data/ mobdir/data/default/t1/78e317a6e78a0fceb27b9fa0cb9dcf5b/f1.

>ls  /hbase/data/mobdir/data/default/t1/78e317a6e78a0fceb27b9fa0cb9dcf5b/f1

D279186428a75016b17e4df5ea43d08020160101 f9d9713ab2fb4a8b825485f6a8acfcd5

D279186428a75016b17e4df5ea43d08020160101 af7713ab2fbf4a8abc5135f6a8467ca8

D279186428a75016b17e4df5ea43d08020160102 9013ab2fceda8b825485f6a8acfcd515

D279186428a75016b17e4df5ea43d08020160102 9a7978013ab2fceda8b825485f6a8acf

D41d8cd98f00b204e9800998ecf8427e20160101 fc94af623c2345f1b241887721e32a48

D41d8cd98f00b204e9800998ecf8427e20160101 d0954af623c2345f1b241887721e3259

D41d8cd98f00b204e9800998ecf8427e20160101 439adf4af623c2345f1b241887721e32

Après le compactage MOB, deux fichiers MOB le 01/01/2016 et le 02/01/2016 pour la région r1 sont compactés en un seul fichier pour chaque jour. Trois fichiers MOB le 01/01/2016 pour la région r2 sont compactés en un seul fichier.

D279186428a75016b17e4df5ea43d08020160101 f49a9d9713ab2fb4a8b825485f6a8acf

D279186428a75016b17e4df5ea43d08020160102 bc9176d09424e49a9d9065caf9713ab2

D41d8cd98f00b204e9800998ecf8427e20160101 d9cb0954af623c2345f1b241887721e3

Étant donné que seuls les fichiers MOB du même jour pour une région peuvent être compactés ensemble, la limite minimale de fichiers MOB sous le répertoire de région MOB unique pour une famille spécifique au cours d'une année sera de 365 x nombre de régions. Avec 1000 régions, dans 10 ans, il y aura 365 x 1000 x 10, 3,65 millions de fichiers après compactage MOB, et ça ne cesse de croître ! Malheureusement, Apache HDFS a une limite de mémoire limitée pour le nombre de fichiers dans un répertoire [2]. Une fois que le nombre de fichiers MOB dépasse cette limite HDFS, la table MOB n'est plus accessible en écriture. Le nombre maximum par défaut de fichiers sous un répertoire pour Apache HDFS est de 1 million. Pour 1 000 régions, elle atteindra cette limite dans environ trois ans. Avec plus de régions, il atteindra la limite plus rapidement.

HBASE-16981 introduit des politiques d'agrégation de partition de compactage MOB hebdomadaires et mensuelles pour améliorer ce problème de mise à l'échelle du nombre de fichiers MOB par des facteurs de 7 ou ~ 30 respectivement.

Conception de politiques de partition de compactage MOB hebdomadaires et mensuelles (HBASE-16981)

L'idée de base de HBASE-16981 est de compacter les fichiers MOB en une semaine calendaire ou un mois calendaire en fichiers moins nombreux et plus volumineux. La semaine calendaire est définie par la norme ISO 8601, elle commence le lundi et se termine le dimanche. Normalement, avec la politique hebdomadaire, après le compactage MOB, il y aura un fichier par semaine et par région ; avec une politique mensuelle, après le compactage MOB, il y aura un fichier par mois et par région. Le nombre de fichiers MOB sous le répertoire de région MOB pour une famille spécifique en un an sera réduit à 52 x nombre de régions avec politique hebdomadaire et 12 x nombre de régions avec politique mensuelle. Cela réduit considérablement le nombre de fichiers MOB après compactage.

L'approche initialement proposée

Lorsque le compactage MOB se produit, le maître HBase sélectionne et agrège les fichiers MOB en un mois calendaire ou une semaine calendaire en moins de fichiers plus volumineux. Selon la fréquence de compactage MOB, il est possible que les fichiers soient compactés plusieurs fois. Par exemple, supposons que l'opération de compactage MOB se produise quotidiennement avec une politique d'agrégation mensuelle. Le jour 1, le compactage MOB compacte tous les fichiers du jour 1 en un seul fichier. Le jour 2, le compactage MOB compacte le fichier du jour 1 et les fichiers du jour 2 dans un nouveau fichier ; le jour 3, le compactage MOB compactera le fichier du jour 2 et les fichiers du jour 3 dans un nouveau fichier, il continue jusqu'au dernier jour du mois. Dans ce cas, les fichiers du jour 1 sont compactés plus de 30 fois et amplifient ainsi la quantité d'E/S en écriture de plus de 30 fois.

L'objectif de conception d'Apache HBase MOB est de réduire l'amplification d'écriture créée par le compactage MOB. Cette approche naïve va à l'encontre de l'objectif de conception.

L'approche finale mise en œuvre

Afin de surmonter les lacunes de l'approche proposée initialement, le compactage MOB par étapes est adopté pour les nouvelles politiques hebdomadaires et mensuelles dans HBASE-16981. La figure 2 montre comment cela fonctionne avec la politique mensuelle, cela fonctionne de la même manière pour la politique hebdomadaire.

Figure 2 Compression MOB intermédiaire avec politique mensuelle

Comme le montre la figure 2, le compactage MOB se produit le 15/11/2016. Les fichiers de la semaine civile en cours sont compactés en fonction de la partition quotidienne avec le seuil MOB configuré. Dans la figure 2, les fichiers du 14/11/2016 sont compactés ensemble et les fichiers du 15/11/2016 sont compactés ensemble. Les fichiers des dernières semaines calendaires du mois en cours sont compactés en fonction de la partition hebdomadaire avec un seuil hebdomadaire (configured-MOB-threshold x 7). Dans la Figure 2, les fichiers du 01/11/2016 au 06/11/2016 sont compactés ensemble et les fichiers du 07/11/2016 au 13/11/2016 sont compactés ensemble. Les fichiers des mois précédents sont compactés sur la base d'une partition mensuelle avec un seuil mensuel (configured-MOB-threshold x 28). Dans la figure 2, les fichiers du 01/10/2016 au 31/10/2016 sont compactés ensemble. Comme on peut le remarquer, la première semaine calendaire de novembre 2016 est du 31/10/2016 au 6/11/2016. Étant donné que le 31/10/2016 est le mois dernier, les fichiers de ce jour sont compactés sur la base de la partition mensuelle, ce qui ne laisse que 6 jours pour la partition hebdomadaire (1/1/2016 ~ 6/11/2016). Après le compactage, il y a 5 fichiers si le seuil de compactage MOB et la taille du lot de compactage MOB sont correctement configurés.

Avec cette conception, les fichiers MOB passent par des compactages en 2 ou 3 étapes. À chaque étape, une partition quotidienne, une partition hebdomadaire ou une partition mensuelle sont appliquées avec un seuil de compactage MOB croissant. Les fichiers MOB sont compactés au plus 3 fois normalement avec une politique mensuelle et au plus 2 fois normalement avec une politique hebdomadaire au cours de leur vie.

Pour plus de détails sur la conception, veuillez consulter [3].

Utilisation

Par défaut, la stratégie de partition de compactage MOB est quotidienne. Pour appliquer une politique hebdomadaire ou mensuelle, un nouvel attribut MOB_COMPACT_PARTITION_POLICY a été ajouté pour la famille de colonnes MOB. L'utilisateur peut définir cet attribut lors de la création d'une table à partir du shell HBase.

>create 't1', {NAME => 'f1', IS_MOB => true, MOB_THRESHOLD => 1000000, MOB_COMPACT_PARTITION_POLICY => 'weekly’}

L'utilisateur peut également modifier le MOB_COMPACT_PARTITION_POLICY de la table existante à partir du shell HBase.

>alter 't1', {NAME => 'f1', MOB_COMPACT_PARTITION_POLICY => 'monthly'}

Si la politique passe de quotidienne à hebdomadaire ou mensuelle, ou d'hebdomadaire à mensuelle, le prochain compactage MOB recompactera les fichiers MOB qui ont été compactés avec la politique précédente. Si la politique passe de mensuelle ou hebdomadaire à quotidienne, ou de mensuelle à hebdomadaire, les fichiers MOB déjà compressés avec la politique précédente ne seront pas recompactés avec la nouvelle politique.

Conclusion

HBASE-16981 résout le problème de mise à l'échelle du numéro de fichier avec Apache HBase MOB. Il sera disponible dans la version Apache HBase 2.0.0. CDH prend en charge Apache HBase MOB dans CDH 5.4.0+. HBASE-16981 est rétroporté et sera disponible dans CDH 5.11.0.

Remerciements

Remerciements particuliers à Jingcheng Du et Anoop Sam John pour leur aide dans la conception et la révision de HBASE-16981, Jonathan Hsieh et Sean Busbey pour la révision du blog.

Références

[1] https://clouderatemp.wpengine.com/blog/2015/06/inside-apache-hbases-new-support-for-mobs/

[2] https://clouderatemp.wpengine.com/blog/2009/02/the-small-files-problem/

[3] https://issues.apache.org/jira/browse/HBASE-16981