Politique de stockage de données HDFS: LAZY_PERSIST

50 0 0 0

1. Politique de stockage de répliques


Par défaut, NameNode sélectionne de manière aléatoire un nœud de données pour écrire des fichiers. Si la capacité de disque de certains nœuds de données d'un cluster est incohérente (la capacité de disque totale de certains nœuds est grande et de certains nœuds est petite), les nœuds ayant une faible capacité de disque seront entièrement écrits. Pour résoudre ce problème, modifiez la stratégie de sélection de disque par défaut des données écrites pour les nœuds de données sur la stratégie de bloc d'espace disponible. Cette stratégie augmente la probabilité d'écrire des blocs de données sur le nœud avec un espace disque disponible important. Cela garantit que l'utilisation du nœud est équilibrée lorsque la capacité de disque des nœuds de données est incohérente.


1.1. Stratégie de stockage de réplica par défaut de NameNode


Première réplique: stockée sur le noeud où réside le client.


Deuxième réplique: stockée sur les nœuds de données du rack distant.


Troisième réplique: stocké sur différents nœuds du même rack pour le nœud où se trouve le client.


S'il y a plus de répliques, stockez-les au hasard sur d'autres nœuds de données.


1.2. Stratégie de distribution en bloc disponible


Première réplique: stockée sur le nœud de données où réside le client (identique à la politique de stockage par défaut).

Deuxième réplique:

l    Lors de la sélection d'un nœud de stockage, sélectionnez deux nœuds de données répondant aux exigences.

l    Comparez les utilisations de l'espace disque des deux nœuds. Si la différence est inférieure à 5%, stockez le réplica sur l'un des nœuds.


l    Si la différence dépasse 5%, il existe une probabilité de 60% (spécifiée par dfs.namenode.available-space-block-placement-policy.balanced-space-preference-fraction et la valeur par défaut 0.6 ) que le réplica soit écrit sur le nœud. dont l'utilisation de l'espace disque est faible.


Pour ce qui est du stockage du troisième réplica et des réplicas suivants, reportez-vous à celui du deuxième réplica.


2. Stratégie de hiérarchie de stockage


L'architecture de stockage HDFS en couches hétérogène fournit quatre types de périphériques de stockage: RAM_DISK, DISK, ARCHIVE et SSD, afin de répondre aux différentes exigences en matière de supports de stockage des nœuds de données.


l    RAM_DISK est un disque dur de virtualisation mémoire offrant les meilleures performances en lecture et en écriture. Sa capacité est petite et limitée par la taille de la mémoire. Une perte de données est susceptible de se produire en cas de panne de courant.


l    Les disques SSD offrent des performances élevées en lecture et en écriture. La capacité de stockage des disques SSD est faible et le coût de stockage unitaire est supérieur à celui des disques durs mécaniques courants.


l    DISK fait référence à un disque dur mécanique commun, qui est le périphérique de stockage principal de HDFS.


l    ARCHIVE indique un support de stockage à haute densité et à faible coût présentant des performances médiocres en lecture et en écriture. De tels dispositifs sont utilisés pour stocker des données massives non-hotspot et installés sur des nœuds dont les capacités de calcul sont faibles.


Les stratégies de stockage pour différents scénarios sont formulées en combinant les quatre types de périphériques de stockage. HDFS prend en charge les stratégies de stockage répertoriées dans la figure 2-1 .


Figure 2-1 Stratégies de stockage HDFS

ID de politique

Nom

Emplacement du bloc (nombre de répliques)

Politique de stockage alternatif

Stratégie de stockage de réplica alternatif

15

LAZY_PERSIST

RAM_DISK: 1, DISK: n -1

DISQUE

DISQUE

12

All_SSD

SSD: n

DISQUE

DISQUE

dix

ONE_SSD

SSD: 1, DISQUE: n -1

SSD, DISQUE

SSD, DISQUE

sept

HOT (par défaut)

DISQUE: n

<aucun>

ARCHIVER

5

CHAUD

DISQUE: 1, ARCHIVE: n -1

ARCHIVE DE DISQUE

ARCHIVE DE DISQUE

2

DU FROID

ARCHIVE: n

<aucun>

<aucun>

 

La stratégie 15-LAZY_PERSIST est utilisée à titre d'exemple. Il est supposé qu'un fichier configuré avec la stratégie a trois réplicas en bloc, le premier réplica est écrit sur RAM_DISK et les deux autres sur la disquette. En guise d'alternative, le premier réplica est écrit dans le type de stockage spécifié par Alternative Storage Policy en cas d'échec d'écriture de RAM_DISK et les deux autres réplicas sont écrits dans le type de stockage spécifié par Alternative Replica Storage Policy en cas d'échec d'écriture sur le DISK.


3 Processus de stratégie de stockage LAZY_PERSIST


3.1 Règles de stockage LAZY_PERSIST


Figure 3-1 La figure suivante illustre la stratégie de stockage LAZY_PERSIST.

102727yq9b2zsetbr9mmbq.png? 1.png

 

HDFS prend en charge la fonction d'écriture de données dans la mémoire de pile gérée par le nœud de données. Le noeud de données enregistre de manière asynchrone des données de la mémoire sur des disques. Les opérations coûteuses d'E / S de disque et de vérification sont supprimées du chemin d'E / S sensible aux performances. Ceci s'appelle Lazy Persist. HDFS assure autant que possible la persistance de la politique de persistance paresseuse. Si la réplique n'est pas conservée sur le disque et que le nœud est redémarré, une perte de données rare peut survenir. La stratégie d'écriture persistante paresseuse est utilisée pour réduire la latence, mais la persistance peut être affectée.


Le principe est illustré aux étapes 4 à 6 de la figure 3-1 . Les données sont écrites dans la RAM puis écrites de manière asynchrone sur le disque. Les étapes 1 à 3 permettent de définir le type de stockage et seront décrites ci-après. Les étapes peuvent être résumées comme suit:


Définissez StoragePolicy sur LAZY_PERSIST pour le répertoire du fichier cible.


Le processus client envoie une demande de création ou d'écriture d'un fichier au NameNode.


Lors de la réception de la demande, le nœud de données écrit les blocs de données dans la mémoire RAM. En outre, il démarre le service de thread asynchrone pour conserver les données en mémoire sur le disque.


Le stockage persistant asynchrone de la mémoire est la caractéristique unique de LAZY_PERSIST. Le traitement des données est retardé en mode persistant paresseux.

Dans FsDatasetImpl, il existe trois objets de service liés au stockage en mémoire:


l    LazyWriter:

C'est un service de fil. Ce thread extrait de façon continue et cyclique les blocs de données de la liste de blocs de données et les ajoute au pool de threads persistants asynchrones RamDiskAsyncLazyPersistService pour exécution.


l    RamDiskAsyncLazyPersistService:

C'est un service de thread persistant asynchrone. Un pool de threads est défini pour chaque bloc de disque. Les blocs de données qui doivent être conservés dans un bloc de disque spécifié sont soumis au pool de threads correspondant. Le nombre maximal de threads dans chaque pool de threads est 1.


l    RamDiskReplicaLruTracker:

Il s'agit d'une classe de suivi de blocs de répliques qui conserve toutes les répliques persistantes et non résistées, ainsi que toutes les informations relatives aux répliques. Par conséquent, lorsqu'un réplica est finalement stocké dans la mémoire, les informations de file d'attente correspondantes du réplica sont modifiées. Lorsque la mémoire de nœud est insuffisante, certains blocs de réplicas non utilisés récemment sont supprimés de cette classe.


3.2. LAZY_PERSIST Processus d'exécution de la politique de stockage


Cette section utilise la stratégie de stockage de réplicas par défaut et la stratégie de hiérarchie de stockage LAZY_PERSIST comme exemple pour décrire le processus d'écriture de fichiers dans HDFS.


1. Démarre le thread LazyWriter au démarrage du nœud de données. Ce thread est le thread principal de la stratégie de stockage en mémoire.


2 Lors de l'écriture d'un fichier, sélectionnez un nœud de données en fonction de la stratégie de stockage de réplica. Dans la stratégie de stockage par défaut, les réplicas sont stockés sur le noeud où se trouve le client, le noeud de données du rack distant et d'autres noeuds dans le même rack que le client.


org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyDefault # choiceTarget


3 Sélectionnez un disque en fonction de la stratégie de stockage sur le nœud de données sélectionné. Selon la stratégie de stockage persistant paresseux, les réplicas sont stockés sur les disques dans l'ordre suivant: RAM_DISK, DISK, DISK.


org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyDefault # choiceTargetInOrder


Faites attention à ce qui suit:


l Si aucun RAM_DISK n'est configuré sur le nœud de données (nœud où réside le client) où le premier réplica est stocké, même si le disque RAM_DISK est configuré sur d'autres nœuds de données, les données sont toujours écrites sur le disque de stockage de remplacement du type DISK. le noeud sur lequel réside le premier réplica.


org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicyDefault # ChooseLocalStorage


l Si RAM_DISK est configuré sur le nœud de données (le nœud sur lequel réside le client) où réside le premier réplica, mais que dfs.datanode.max.locked.memory n'est pas configuré ou défini sur une valeur faible (128 Mo plus petit que la taille du bloc actuel) ), les répliques sont écrites sur le disque de stockage alternatif du type DISK du nœud sur lequel réside le premier réplica.


org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl # createRbw


l   Si RAM_DISK est configuré sur le nœud de données (le nœud sur lequel réside le client) où réside le premier réplica, mais que l'espace de stockage restant de la mémoire actuelle est insuffisant, le système supprime les blocs existants dans la mémoire en fonction du dernier algorithme inutilisé à réserver. au moins 128 Mo d'espace pour le bloc actuel. Un maximum de trois blocs existants peut être supprimé. Si l'espace est toujours inférieur à 128 Mo après la suppression de trois blocs, le premier réplica est écrit sur le disque de stockage de remplacement du type DISK du nœud sur lequel réside le premier réplica.


org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl.LazyWriter # evictBlocks


4        Écrivez le bloc de la première réplique de RAM_DISK.


l    Ecrivez les données dans le répertoire rbw du disque où réside RAM_DISK.


current / BP-xxxx-xxxxx-xxxxx / current / rbw / subdir0 / subdirX / blk_XXX


l    Le bloc est déplacé vers le répertoire finalisé du disque où réside RAM_DISK.


current / BP-xxxx-xxxxx-xxxxx / current / finalized / subdir0 / subdirX / blk_XXX


5        Les blocs écrits dans RAM_DISK sont ajoutés à la liste de réplicas non homogène de RamDiskReplicaLruTracker.


6        LazyWriter vérifie périodiquement s'il existe des blocs non persistants. S'il y en a, il effectue des opérations de persistance sur les blocs persistants.


La période de vérification est spécifiée par dfs.datanode.lazywriter.interval.sec , soit 60 secondes par défaut.


org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl.LazyWriter # run


102824tus8wemedazdnzsd.png? 2.png

 

Le processus de persistance est le suivant:


org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl.LazyWriter # saveNextReplica


l    Sélectionnez des blocs non persistants en fonction de l'algorithme FIFO (premier entré, premier sorti).


org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.RamDiskReplicaLruTracker # dequeueNextReplicaToPersist


l    Sélectionnez un disque du type DISK sur le nœud de données actuel. S'il existe plusieurs disques du type DISK sur le nœud de données actuel, sélectionnez des disques en fonction de la stratégie spécifiée par dfs.datanode.fsdataset.volume.choosing.policy .


org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsVolumeList # ChooseVolume


l    Copiez les blocs écrits dans RAM_DISK dans le répertoire suivant du disque sélectionné:


current / BP-xxxx-xxxxx-xxxxx / current / lazypersist / subdir0 / subdirX / blk_XXX


org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.RamDiskAsyncLazyPersistService.ReplicaLazyPersistTask # run


org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsVolumeImpl # copyBlockToLazyPersistLocation


l    Mettre à jour les indicateurs de surveillance JMX.


org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl # onCompleteLazyPersist


102844cd9e06sneqz2qwru.png? 3.png

 

La rédaction du fichier est terminée.


Notez que les blocs écrits dans RAM_DISK sont toujours stockés dans RAM_DISK. Exécutez la commande fsck pour afficher les informations sur le bloc, comme suit:


102855jk1vkg2go68pgp91.png? 4.png

 

Lorsqu'un fichier est écrit et que l'espace mémoire (espace restant de l'espace spécifié par dfs.datanode.max.locked.memory ) du nœud de données est insuffisant, les blocs suivants de RAM_DISK sont supprimés. Dans ce cas, les blocs de RAM_DISK dans les répertoires suivants sont supprimés:


current / BP-xxxx-xxxxx-xxxxx / current / finalized / subdir0 / subdirX / blk_XXX


De plus, les blocs persistants sur le disque de type DISK sont déplacés du répertoire lazypersist vers le répertoire finalisé .


Avant que les blocs de RAM_DISK soient supprimés:


102906z1i8jww43q16tp9i.png? 5.png

 

Une fois les blocs de RAM_DISK supprimés:


102915mt9yajj1k4f4xok8.png? 6.png

 

Dans la sortie de la commande fsck , les informations sur l'emplacement du bloc de fichiers sont affichées sous forme de DISK.


102922vx8ktx778agesef7.png? 7.png



  • x
  • Standard:

Commentaire

envoyer
Connectez-vous pour répondre. Se connecter | Enregistrer

Remarque Remarque : Afin de protéger vos droits et intérêts légitimes, ceux de la communauté et des tiers, ne divulguez aucun contenu qui pourrait présenter des risques juridiques pour toutes les parties. Le contenu interdit comprend, sans toutefois s'y limiter, le contenu politiquement sensible, le contenu lié à la pornographie, aux jeux d'argent, à l'abus et au trafic de drogues, le contenu qui peut divulguer ou enfreindre la propriété intellectuelle d'autrui, y compris les secrets professionnels, les marques commerciales, les droits d'auteur et les brevets, ainsi que la vie privée personnelle. Ne partagez pas votre nom d'utilisateur ou votre mot de passe avec d'autres personnes. Toutes les opérations effectuées à partir de votre compte seront considérées comme vos propres actions, et toutes les conséquences en découlant vous seront imputées. Pour plus de détails, voir « Politique de confidentialité ».
Si le bouton de la pièce-jointe n'est pas disponible, mettez à jour Adobe Flash Player à la dernière version.
Connectez-vous pour participer à la communication et au partage

Connectez-vous pour participer à la communication et au partage

S'identifier