HDFS Balancer

19 0 0 0

1. utilisation


équilibreur de hdfs

[-policy <policy>]

[-seuil <seuil>]

[-exclude [-f <fichier-hôtes> | <liste d'hôtes séparées par des virgules>]]

[-include [-f <fichier-hôtes> | <liste d'hôtes séparées par des virgules>]]

[-source [-f <fichier-hôtes> | <liste d'hôtes séparées par des virgules>]]

[-blockpools <liste d'id de blockpool séparés par des virgules>]

[-idleiterations <idleiterations>]

[-runDuringUpgrade]


2. Paramètre dfs.balance.bandwidthPerSec


Cette propriété détermine la vitesse maximale à laquelle un bloc sera déplacé d'un nœud de données à un autre. La valeur par défaut est 1 Mo par seconde. Plus la bande passante est élevée, plus un cluster peut atteindre rapidement l'état équilibré, mais avec une concurrence accrue avec les processus d'application. Si un administrateur modifie la valeur de cette propriété dans le fichier de configuration, la modification est observée lors de la prochaine modification de HDFS .


3. L'équilibreur se ferme automatiquement lorsque l'une des cinq conditions suivantes est remplie


l   Le cluster est équilibré;


l   Aucun bloc ne peut être déplacé.


l   Aucun bloc n'a été déplacé pour les itérations consécutives spécifiées (5 par défaut);


l   Une exception IOException se produit lors de la communication avec le namenode;


l   Un autre équilibreur est en cours d'exécution.


4. Processus d'exécution de l'équilibreur


(1)   Effectuez des opérations d'équilibrage pour tous les NameServices de chaque itération.


(2)   Effectuez des opérations d'équilibrage sur tous les NameServices en mode série (chaque NameService correspond à un objet d'équilibrage).


org.apache.hadoop.hdfs.server.balancer.Balancer # run


pour (NameNodeConnector nnc: connecteurs) {
Équilibreur final b = nouvel équilibreur (nnc, p, conf);
// La stratégie de placement de bloc avec initiation de balise de nœud doit être initiée après le lancement de l'équilibreur.
b.checkReplicationPolicyCompatibility (conf);
Résultat final r = b.runOneIteration ();
r.print (itération, System. out );


(3)   Calculez le volume de données requis pour la migration en douceur des clusters.


(a) Calculez l'utilisation moyenne de l'espace par cluster en utilisant la formule suivante:


AvgUtilization = Espace total / Capacité totale


(b) Calculez chaque type de stockage de chaque noeud de données (DN) en utilisant les formules suivantes:


l   Utilisation: utilisation du disque


l   Capacité: capacité du disque


l   Valeur de différence entre l'utilisation et l'utilisation moyenne: UtilizationDiff = Utilization - AvgUtilization


l   Valeur de différence entre la valeur absolue de la valeur de différence entre l'utilisation et l'utilisation moyenne et le seuil:


thresholdDiff = Math.abs (utilisationDiff) - seuil;


l   Volume de données maximal à migrer pour chaque type de stockage de chaque DN:


utilisationDi ff ≥ 0: maxSize2Move = min (utilisationDiff x Capacité, MAX_SIZE_TO_MOVE);


utilisationDiff <0: maxSize2Move = min [(-utilizationDiff) x capacité, capacité d'espace restant, MAX_SIZE_TO_MOVE];


Ajoutez chaque DN (y compris le type de stockage) aux quatre ensembles suivants en fonction de la relation entre l'utilisation, l'utilisation moyenne et le seuil de chaque type de stockage DN.


l   overUtilized (supérieur à la limite supérieure): overLoadedBytes = thresholdDiff x Capacity.


l   overLoadedBytes = overLoadedBytes + seuilDiff x Capacité


l   aboveAvgUtilized (supérieur à la valeur moyenne, mais inférieur à la limite supérieure)


l   underAvgUtilized (inférieure à la valeur moyenne, mais supérieure à la limite inférieure)


l   underUtilized (inférieur à la limite supérieure): underLoadedBytes = thresholdDiff x Capacity


l   underLoadedBytes = underLoadedBytes + seuilDiff x capacité


Chaque ensemble comprend des informations sur le DN et le type de stockage. Par conséquent, chaque DN est ajouté à un ensemble pour plusieurs fois en fonction de différents types de stockage, et un DN peut également être ajouté à plusieurs ensembles.


(c) Volume de données renvoyé à migrer en douceur dans le cluster: max (overLoadedBytes, underLoadedBytes).


(4)   Calculez le volume total de données à migrer dans cette itération en fonction des informations de capacité relatives à DN.


(a) Sélectionnez les noms distinctifs de source et de destination en fonction des racks à migrer. Sélectionnez de préférence le même rack, et aucune séquence spéciale n'est requise pour les autres sélections.


(b) Sélectionnez les DN d'origine et les DN de destination en fonction de la capacité de stockage du DN pour migrer les données. La séquence de sélection est la suivante:


overUtilized> underUtilized: migration de données d'un DN supérieur à la limite supérieure vers un DN inférieur à la limite inférieure.


overUtilized> belowAvgUtilized: Migration des données d'un DN supérieur à la limite supérieure vers un DN supérieur à la limite inférieure et inférieur à la valeur moyenne.


aboveAvgUtilized> underUtilized: Migration des données d'un DN inférieur à la limite inférieure mais supérieur à la valeur moyenne vers un DN inférieur à la limite inférieure.


(c)   Chaque type de stockage correspond à un groupe de stockage utilisé pour enregistrer la quantité maximale de données de migration.


maxSize2Move en une itération et la quantité de données réelle à planifier migrée.


Le processus de migration des données entre les noms distinctifs source et cible est le suivant (lors de la sélection d'un groupe de migration à partir du jeu source et du jeu cible, vous devez vérifier si les types de stockage sont les mêmes.):


Pour (chaque DN source)

{

Pour (chaque DN de destination)

{

La taille des données à migrer = min (src.maxSize2Move-src.scheduledSize, des.maxSize2Move-des.scheduledSize);

src.scheduledSize + = size;

des.scheduledSize + = size;

répartiteur.add (src, des); // Ajouter le DN source et le DN de destination au répartiteur et préparer la migration.

if (des.maxSize2Move-des.scheduledSize == 0)

{

Supprimez le desDn de l’ensemble de DN cible .

continue; // continue à parcourir le prochain desDn .

}

if (src.maxSize2Move-src.scheduledSize == 0)

{

Supprimez le desDn de l’ensemble de DN cible .

Pause; // Continuer à parcourir le prochain srcDn .

}

}

}


(ré)   Ajoutez la taille planifiée de tous les DN de source dans le répartiteur pour obtenir le volume de données total à migrer dans cette itération.


(5)   Pour chaque paire de DN de source et de destination, vous devez démarrer un thread pour migrer les blocs de données entre les DN de source et de destination. Lorsqu'aucune donnée n'est déplacée dans cinq itérations, vous devez sortir de la balance.


(une)   Vingt threads sont démarrés par seconde, ce qui est limité par BALANCER_NUM_RPC_PER_SEC .


(b)   Sélectionnez le DN de transit dans l'ordre suivant:


* Les DN d'origine et de destination sont le même nœud et aucun transit n'est requis.


* Si le groupe de nœuds est pris en charge, sélectionnez le DN du même groupe de nœuds.


* Si le DN du même rack existe, sélectionnez le DN du même rack.


* Sélectionnez un DN qui n'est pas trop occupé.


(c)   Vérifiez si le bloc peut être migré (org.apache.hadoop.hdfs.server.balancer.Dispatcher # isGoodBlockCandidate).


* Le bloc n'est pas en cours de migration ou ne se trouve pas dans la file d'attente de migration.


* Aucune copie du bloc n'existe sur le DN de destination.


* La migration du bloc ne réduit pas le nombre de racks où se trouve la copie de bloc.


(ré)   Sélectionnez le bloc à migrer et le DN de transit.


src.scheduledSize = blockSize

task.size = blockSize


e)   Lancez la migration de bloc (org.apache.hadoop.hdfs.server.balancer.Dispatcher.PendingMove # dispatch).


Créez une connexion de socket avec le DN de destination ( sortie pour demande d'envoi et entrée pour réception de messages).


* Utilisez out pour envoyer une demande de transfert de bloc (y compris une source proxy).


* Utiliser pour recevoir le résultat du transfert.


Remarque: les règles de migration des données de balance sont les suivantes:


1.        Les données de solde ne peuvent pas être migrées entre différents types de stockage.


2        Le nombre de copies ne peut pas être réduit après la migration des données de la balance.


3        Le nombre de racks contenant les copies ne peut pas être réduit après la migration des données de la balance.


  • 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