Fonction de fédération basée sur routeur analysant le noyau Uisng en mode de fédération basée sur routeur

21 0 0 0

La fonction du point d'entrée du processus DFSRouter est la suivante:


org.apache.hadoop.hdfs.server.federation.router.DFSRouter # main

 

public static void main (String [] argv) {

if (DFSUtil.parseHelpArgument (argv, USAGE, System.out, true)) {

System.exit (0);

}

 

essayer {

StringUtils.startupShutdownMessage (Router.class, argv, LOG);

 

Routeur routeur = nouveau routeur ();

 

ShutdownHookManager.get (). AddShutdownHook (

nouveau CompositeServiceShutdownHook (routeur), SHUTDOWN_HOOK_PRIORITY);

 

Configuration conf = new HdfsConfiguration ();

routeur.init (conf);

routeur.start ();

} catch (Throwable e) {

LOG.error ("Impossible de démarrer le routeur", e);

terminer (1, e);

}

}


1. Initialisation du routeur


org.apache.hadoop.hdfs.server.federation.router.Router # serviceInit


1)      Si routerHeartbeatService n'est pas null , mettez à jour le statut du routeur dans le magasin d'état sur INITIALIZING .


2)      Créez un StateStoreService connecté au magasin d'état.


3)      Créez un ActiveNamenodeResolver et analysez le NameNode actif du NS.


4)      Créez un FileSubclusterResolver et analysez les chemins d'accès complet et local.


5)      Créez un serveur RPCServer pour traiter les demandes des clients.


6)      Créez un serveur d'administration pour gérer la table montée (dfsrouteradmin).


7)      Créez un serveur HttpServer pour afficher la page native et les extensions de gestion Java (JMX).


8)      Créez un service de pulsation NamenodeHeartbeatService et NameNode pour collecter périodiquement des informations sur le statut de NameNode et signaler le statut au magasin d'état. Pour tous les NameNodes détectés par le routeur actuel, créez un NamenodeHeartbeatService pour chaque NameNode.


9)      Créez un service RouterHeartbeatService et un service Heartbeat du routeur pour signaler périodiquement l'état du routeur au magasin d'état.


dix)   Créez un RouterMetricsService pour surveiller les indicateurs requis.


11)   Créez des services liés aux quotas RouterQuotaManager et RouterQuotaUpdateService pour traiter les informations de configuration relatives à la table montée.


12)   Créez un RouterSafemodeService. Si le routeur est à l'état de mode sécurisé , toutes les demandes RPC sont rejetées.


2. Mise en route du routeur


org.apache.hadoop.hdfs.server.federation.router.Router # serviceStart


1)      Mettez à jour le statut du routeur dans le magasin d'état sur RUNNING .

2)      Démarrer le moniteur de pause.

3)      Services de démarrage ajoutés lors de l'initialisation du routeur.


3. StateStoreService


3.1. Paramètres associés


dfs.federation.router.store.connection.test


Ce paramètre indique l'intervalle de connexion du routeur au magasin d'état. La valeur par défaut est 1 minute.


dfs.federation.router.store.membership.expiration


Si le statut d'un enregistrement dans membershipStore n'est pas mis à jour dans cet intervalle, le NameNode actuel expire et n'est pas disponible. L'intervalle par défaut est 5 minutes (cinq fois le temps de pulsation).


dfs.federation.router.store.router.expiration


Si le statut d'un routeur dans le magasin de routeurs n'est pas mis à jour dans cet intervalle, le routeur est marqué comme étant en mode de sécurité et non disponible. L'intervalle par défaut est 5 minutes (cinq fois le temps de pulsation).


dfs.federation.router.cache.ttl


Ce paramètre indique l'intervalle de mise à jour du cache sur le routeur. La valeur par défaut est 1 minute.


3.2. Fonctions principales de StateStoreService


1)      Initialisez StateStoreDriver et maintenez sa connexion avec le magasin d'état. Actuellement, plusieurs StateStoreDrivers sont fournis.


l   org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreFileImpl


l   org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreFileSystemImpl


l   org.apache.hadoop.hdfs.server.federation.store.driver.impl.StateStoreZooKeeperImpl


2)      Enregistrez dynamiquement les magasins de disques. Actuellement, les magasins de disques suivants sont pris en charge:


l   MembershipStore: état des Namenodes dans la fédération.


l   MountTableStore: Montez la table entre des sous-grappes .


l   RouterStore: Etat du routeur dans la fédération.


l   isabledNa meserviceStore: services de noms désactivés.


3.3. StateStoreService Initialization


org.apache.hadoop.hdfs.server.federation.store.StateStoreService # serviceInit


1)      Créez une instance StateStoreDriver basée sur la classe définie dans dfs.federation.router.store.driver.class .


2)      Ajoutez des magasins de disques, MembershipStore, MountTableStore, RouterStore et DisabledNameserviceStore.


3)      Créez un StateStoreConnectionMonitorService, connectez-vous périodiquement au magasin d'état et vérifiez si ce dernier est disponible.


dfs.federation.router.store.connection.test


Ce paramètre indique l'intervalle de connexion du routeur au magasin d'état. La valeur par défaut est 1 minute.


4)      Configurez l'heure d'expiration de MemebershipState et RouterState.


dfs.federation.router.store.membership.expiration


Si le statut d'un enregistrement dans membershipStore n'est pas mis à jour dans cet intervalle, le NameNode actuel expire et n'est pas disponible. L'intervalle par défaut est 5 minutes (cinq fois le temps de pulsation).


dfs.federation.router.store.router.expiration


Si le statut d'un routeur dans le RouterStore n'est pas mis à jour dans cet intervalle, le routeur est marqué comme étant en mode de sécurité et non disponible. L'intervalle par défaut est 5 minutes (cinq fois le temps de pulsation).


5)      Créez un StateStoreCacheUpdateService. Le service met régulièrement à jour le cache sur le routeur, y compris les enregistrements de données dans les quatre magasins d’enregistrements, afin d’empêcher chaque demande de se connecter au magasin d’état pour interrogation et de réduire la pression du magasin d’état sur ZooKeeper.


org.apache.hadoop.hdfs.server.federation.store.CachedRecordStore # loadCache


dfs.federation.router.cache.ttl


Ce paramètre indique l'intervalle de mise à jour du cache sur le routeur. La valeur par défaut est 1 minute.


Lorsque le cache local du routeur est mis à jour, le système vérifie si les données du magasin d'état ont expiré. Si les données expirent, elles sont écrasées.


Mettez en cache toutes les données du magasin d'état sur le routeur et mettez à jour le nombre d'enregistrements de données mis en cache dans le routeur avec les métriques.


103225ybecmhp3zbezuu4r.png? Image.png


Voici un exemple d'affichage de code lorsque la logique de vérification de l'expiration d'un enregistrement est incorrecte.


org.apache.hadoop.hdfs.server.federation.store.CachedRecordStore # overrideExpiredRecords


103208omimgkghrbrqixut.png? Image.png

 

org.apache.hadoop.hdfs.server.federation.store.CachedRecordStore # isUpdateTime


La relation entre MIN_UPDATE_MS et dfs.federation.router.cache.ttl est la suivante:


103315unhlzk8lonnfkkzz.png? Image.png

 

6)      Créez StateStoreMetrics et ajoutez une interface JMX.


3.4. StateStoreService Démarrage


1)      Chargez le pilote de magasin d'état. Une fois le pilote du magasin d'état chargé, mettez à jour les données de cache sur le routeur.


2)      Démarrez d'autres services créés lors de l'initialisation du routeur.


3.5 StateStoreCacheUpdateService


3.5.1. MembershipStoreCacheUpdate


Mettez à jour le MembershipStore mis en cache sur le routeur et mettez à jour les valeurs des cartes dans la classe d'implémentation MembershipStoreImpl.


org.apache.hadoop.hdfs.server.federation.store.impl.MembershipStoreImpl # MembershipStoreImpl


public MembershipStoreImpl (pilote StateStoreDriver) {

super (pilote);

 

this.activeRegistrations = new HashMap <> ();

this.expiredRegistrations = new HashMap <> ();

this.activeNamespaces = new TreeSet <> ();

}

activeRegistrations -> Carte <String, MembershipState>

Stocke le statut des NameNodes actifs dans le cluster actuel. Clé: ID NameNode. Valeur: l'état du NameNode signalé récemment.

expiredRegistrations -> Carte <String, MembershipState>

Stocke le statut des NameNodes expirés. Clé: NameNode ID-NameService ID-Router ID, Valeur: enregistrements expirés.

activeNamespaces -> Définir <FederationNamespaceInfo>


Stocke des informations sur les espaces de nom actifs dans le cluster actuel et les informations de service de nom.

 

org.apache.hadoop.hdfs.server.federation.store.impl.MembershipStoreImpl # loadCache


1) Appelez la classe parent CachedRecordStore # loadCache pour mettre à jour le cache dans MembershipStore sur le routeur.


2) Effacez les enregistrements activeRegistrations, expiredRegistrations et activeNamespaces.


3) Parcourez les enregistrements mis en cache mis à jour à l'étape 1.


Si le statut NameNode est EXPIRED , ajoutez expiredRegistrations. Sinon, continuez l'opération.


Ajoutez l'ID NameNode et MembershipState à nnRegistrations. nnRegistrations stocke l'ID NameNode et tous les enregistrements MembershipState qui signalent l'ID NameNode.


Obtenez l'ID NameService, l'ID de cluster et l'ID BlockPool de l'enregistrement, créez FederationNamespaceInfo et ajoutez-le à activeNamespaces.


4) Sur la base des nnRegistrations obtenues à l'étape 3, dans tous les enregistrements du même ID NameNode, sélectionnez le statut (Actif, Veille et Indisponible) affiché pour plus de la moitié des enregistrements correspondant à un ID NameNode en tant que statut du NameNode. Sélectionnez le dernier enregistrement qui affiche le statut et ajoutez-le à ActiveRegistrations.


org.apache.hadoop.hdfs.server.federation.store.impl.MembershipStoreImpl # getRepresentativeQuorum

 

4. Resolveur de Namenode actif


Cette section décrit l'interface appelée par RouterRpcServer. Analyse le NameNode actif en cours en fonction de l'ID NameService et de l'ID Blockpool.


La classe utilisée pour implémenter cette interface est la suivante:


org.apache.hadoop.hdfs.server.federation.resolver.MembershipNamenodeResolver


Les fonctions principales sont les suivantes:


4.1. Chargement du cache pour MembershipStore et DisabledNameserviceStore


org.apache.hadoop.hdfs.server.federation.resolver.MembershipNamenodeResolver # loadCache


4.2. Fourniture de l'interface pour que RouterRpcServer interroge la liste NameNode en fonction de l'ID NameService ou de l'ID Blockpool


org.apache.hadoop.hdfs.server.federation.resolver.MembershipNamenodeResolver # getNamenodesForNameserviceId


org.apache.hadoop.hdfs.server.federation.resolver.MembershipNamenodeResolver # getNamenodesForBlockPoolId


Les deux interfaces précédentes renvoient une liste NameNode, triée dans l'ordre suivant: NameNode actif, NameNode en veille et NameNode non disponible.


1)      Vérifiez si le cacheNS ou le cacheBP à interroger existe dans les caches cacheNS ou cacheBP. Si oui, le résultat est renvoyé.


2)      Si non, interrogez NameService ou le tiers dans le cache MembershipStore du routeur. Si le service de noms ou le tiers est trouvé, ajoutez-le au cache cacheS ou à cacheBP.


103331fu397h5a5saojzhs.png? Image.png


La requête ci-dessous consiste à obtenir la liste NameNode correspondant au NameService ou au tiers auprès de MembershipStoreImpl # activeRegistrations et à trier la liste NameNode obtenue en fonction de l'état NameNode.


3)      Chaque fois que le cache dans MembershipStore est actualisé, les caches cacheNS et cacheBP sont effacés.


4.3. Fournir l'interface pour la mise à jour du nœud de nom actif


org.apache.hadoop.hdfs.server.federation.resolver.MembershipNamenodeResolver # updateActiveNamenode


Si RouterRpcServer ne parvient pas à se connecter à un NameNode basé sur le NameNode actif renvoyé mais parvient à se connecter à un autre NameNode, mettez à jour le NameNode actif correspondant à l'ID NameService dans le cache MembershipStore afin que le nouveau NameNode actif soit obtenu lors du prochain accès à NameService. De cette façon, l'efficacité de l'accès est améliorée.


5. FileSubclusterResolver


Cette section décrit l'interface permettant d'analyser des chemins globaux en chemins spécifiques.


L'interface est implémentée à l'aide de la classe suivante:


org.apache.hadoop.hdfs.server.federation.resolver.MountTableResolver


org.apache.hadoop.hdfs.server.federation.resolver.MultipleDestinationMountTableResolver


5.1. Obtention d'un chemin spécifique d'un chemin global


1)      org.apache.hadoop.hdfs.server.federation.resolver.MountTableResolver # getDestinationForPath


Recherchez le point de montage qui chevauche le plus le répertoire de requête actuel et renvoyez la liste des chemins distants du point de montage.


2)      org.apache.hadoop.hdfs.server.federation.resolver.MultipleDestinationMountTableResolver # getDestinationForPath


Triez les chemins distants en fonction de la liste de chemins distants renvoyée par MountTableResolver # getDestinationForPath.


l   S'il n'existe qu'un seul chemin distant, la liste de chemins distants d'origine est renvoyée.


l   S'il existe plusieurs chemins distants, sélectionnez le premier NameService en fonction de la stratégie de tri configurée, placez le NameService en tant que premier chemin distant et triez les autres NameServices dans la séquence d'origine.


org.apache.hadoop.hdfs.server.federation.resolver.PathLocation # CommandedNamespaces


3)      politique de tri


l   HASH: sélectionnez un service de noms en effectuant un hachage basé sur le répertoire de niveau 1 du chemin de requête.


l   HASH_ALL: sélectionnez un service de noms en effectuant un hachage basé sur le chemin global du chemin de la requête.


l   RANDOM: mode aléatoire


l   LOCAL: Obtenez le NameService du noeud sur lequel se trouve le client. Si NameService n'existe pas sur le nœud où se trouve le client, la valeur null est renvoyée.


l   ESPACE: Sélectionnez un service de noms avec un grand espace.


5.2. Obtention de tous les points de montage dans un chemin global


org.apache.hadoop.hdfs.server.federation.resolver.MountTableResolver # getMountPoints


S'il existe actuellement un point de montage dans le chemin d'accès global interrogé, tous les points de montage du chemin d'accès à la requête en cours sont renvoyés.


5.2.1. Obtention du service de nom par défaut du cluster


Obtenez le NameService par défaut configuré en mode de fédération.


NameService est configuré à l'aide du paramètre dfs.federation.router.default.nameserviceId .


6. RouterRpcServer


RouterRpcServer traite les requêtes des clients, implémente l'interface du client NameNode et les transmet au NameNode actif du sous-cluster.


6.1. Paramètres associés


l   dfs.federation.router.handler.count


Valeur par défaut: 10


l   dfs.federation.router.handler.queue.size


Valeur par défaut: 100


l   dfs.federation.router.reader.count


Valeur par défaut: 1


l   dfs.federation.router.reader.queue.size => ipc.server.read.connection-queue.size


Valeur par défaut: 100


6.2. Opération CREATE


org.apache.hadoop.hdfs.server.federation.router.RouterRpcServer # create


1)      Vérifiez si l'opération d'écriture est autorisée.


l   Si rpcMonitor n'est pas null, définissez l'heure de début de l'opération.


l   Ajoutez l'opération d'écriture à la file d'attente de threads du type d'opération.


l   Vérifiez si le routeur est en mode de sécurité. Si c'est le cas, augmentez la valeur de rpcMonitor.routerFailureSafemode de 1 et lève l' exception StandbyException . Les opérations d'écriture ne sont pas autorisées.


2)      Si creatParent et isPathAll sont définis sur true , créez un répertoire parent pour tous les sous-clusters. Si le répertoire parent est créé avec succès pour un sous-cluster, la création de tous les sous-clusters est réussie.


l   La logique de jugement de isPathAll est le mode de tri de la table montée, HASH_ALL, RANDOM ou SPACE.


/ **

* Vérifiez si une table de montage couvre tous les emplacements.

* @return Si la table de montage s'étend sur tous les emplacements.

* /

public boolean isAll () {

DestinationOrder order = getDestOrder ();

ordre de retour == DestinationOrder.HASH_ALL ||

order == DestinationOrder.RANDOM ||

order == DestinationOrder.SPACE;

}


3)      Vérifiez si le fichier actuel existe dans le sous-cluster.


org.apache.hadoop.hdfs.server.federation.router.RouterRpcServer # getCreateLocation


l   Appelez la méthode getBlockLocations dans chaque sous-cluster en séquence. Lorsqu'un sous-cluster retourne un message de réussite ou que toutes les méthodes sont appelées pour tous les sous-clusters, la tâche s'arrête.


l   Si le fichier actuel existe déjà dans un sous-cluster, les informations d'emplacement sont renvoyées et le NameNode du sous-cluster corrige le bogue.


l   Si le fichier en cours n'existe dans aucun sous-cluster, le système parcourt le chemin distant en séquence en fonction du chemin réel du fichier pour effectuer l'opération CREATE. Lorsque l'opération est effectuée avec succès ou que le chemin distant est traversé pour tous les sous-clusters, la tâche s'arrête.


6.3. Opération getListing


org.apache.hadoop.hdfs.server.federation.router.RouterRpcServer # getListing


1)      Obtenez une liste des chemins distants (chemins spécifiques) du chemin de requête actuel.


2)      Effectuez l'opération getListing sur tous les sous-groupes, obtenez le résultat de l'exécution en fonction de la séquence des chemins distants dans 1 et stockez le résultat dans TreeMap. <RemoteLocation, DirectoryListing>.


3)      Intégrez les opérations DirectoryListing renvoyées par tous les sous-clusters dans une carte basée sur le résultat de l'exécution situé en 2. La clé est nom_fichier et la valeur est HdfsFileStatus .


Notez que si un fichier portant le même nom existe dans le même répertoire sur différents services de noms, le fichier nouvellement créé remplacera le fichier créé auparavant. Les noms de fichier sous un chemin global doivent être uniques.


4)      Obtenez des informations sur la table montée dans le chemin et ajoutez les points de sous-montage dans le chemin à la carte de résultat final.


Notez que si un point de montage porte le même nom qu'un fichier ou un sous-répertoire du répertoire global, le sous-répertoire ou l'état du fichier sera remplacé par celui du point de montage.


7. RouterAdminServer


Traite toutes les demandes d’administration, c’est-à-dire les demandes liées aux opérations dfsrouteradmin


7.1. Paramètres associés


l   dfs.federation.router.admin.handler.count


Valeur par défaut: 1


7.2. Précautions


Ajoutez des opérations liées à la modification de la table montée pour modifier la table montée dans le magasin d'état.


Les opérations de lecture telles que ls sont lues à partir de MountTableStore mis en cache sur le routeur.


Notez que le cache du routeur est mis à jour toutes les minutes. Le paramètre dfs.federation.router.cache.ttl spécifie l'intervalle de mise à jour. Lorsque les données de la table montée sont modifiées, la dernière opération de modification peut ne pas être obtenue après l'exécution de l'opération ls . https://issues.apache.org/jira/browse/HDFS-13443.


Si le routeur est en mode de sécurité, la table montée ne peut pas être ajoutée ou supprimée.


7.3. Commandes Safemode


Les commandes Safemode permettent de forcer le routeur à passer en mode de sécurité ou en mode non sécurisé.


hdfs dfsrouteradmin -safemode entrer | partir | obtenir [-routers <routeur_list>]


1)      Si le paramètre -routers n'est pas ajouté pendant le fonctionnement du safemode, entrez | leave | get , le premier routeur défini dans dfs.federation.router.admin-address.list est configuré par défaut.


103400r6g8ipvw6v15p567.png? Image.png


103406sqlevqhhfczn7tly.png? Image.png


2)      Si le paramètre -routers est ajouté pendant le fonctionnement du mode sans échec, entrez | Leave | get , le routeur de la liste de routeurs est configuré.


103419prwciw1v88bwczfd.png? Image.png


  3)      Lorsque le premier routeur de la liste est en mode de sécurité, le premier routeur est connecté en premier lors de la modification de la table montée. Ensuite, le routeur est trouvé en mode de sécurité; d'autres routeurs de la liste sont disponibles; et les opérations peuvent être effectuées normalement.


103432mlm4m0govlzhykm4.png? Image.png

 

8. NamenodeHeartbeatService


Cette section décrit le service de pulsation NameNode. Le routeur crée un NamenodeHeartbeatService indépendant pour chaque NameNode actuellement surveillé, collecte périodiquement des informations sur l'état du NameNode et les écrit dans le magasin d'état.


org.apache.hadoop.hdfs.server.federation.router.NamenodeHeartbeatService


8.1. Paramètres associés


l   dfs.federation.router.monitor.namenode


Indique la liste des NameNodes à détecter par le routeur. Le format est le suivant: nsid.nnid, nsid.nnid.


l   dfs.federation.router.monitor.localnamenode.enable


Indique s'il faut surveiller le NameNode local. Si la valeur est true , un NamenodeHeartbeatService est créé pour le NameNode sur le même nœud. La valeur par défaut est true .


l   dfs.federation.router.heartbeat.interval


Indique l'intervalle pendant lequel le routeur collecte l'état du NameNode. La valeur par défaut est 5s .


8.2. Messages de pulsation NameNode


org.apache.hadoop.hdfs.server.federation.router.NamenodeHeartbeatService # getNamenodeStatusReport


1)      NameSpaceInfo


Le routeur se connecte au NameNode via l'adresse IP du service (port 25005 dfs.namenode.servicerpc-address) et obtient la valeur de NameSpaceInfo .


/ **

* Version de @see #getNamespaceInfo () qui n'est pas protégée par un

* fermer à clé.

* /

NamespaceInfo unprotectedGetNamespaceInfo () {

renvoyer new NamespaceInfo (getFSImage (). getStorage (). getNamespaceID (),

getClusterId (), getBlockPoolId (),

getFSImage (). getStorage (). getCTime (), getState ());

}


2)      Safemode


Utilisez l'adresse IP du service (port 25005 dfs.namenode.servicerpc-address) pour vérifier si le nœud de nom est en mode de sécurité.


3)      FSNamesystem


Obtenez les informations NameNode JMX en utilisant l'adresse IP du client Web.


org.apache.hadoop.hdfs.server.federation.router.NamenodeHeartbeatService # updateJMXParameters

/ **

* Obtenez les paramètres pour un Namenode auprès de JMX et ajoutez-les au rapport.

* @param address Interface Web du Namenode à **.

* @param report Rapport d'état Namenode à mettre à jour avec les données JMX.

* /

updateJMXParameters ((

Adresse de chaîne, rapport NamenodeStatusReport) {

essayer {

// Une partie de ce travail doit être déplacée vers son propre utilitaire

String query = "Hadoop: service = NameNode, name = FSNamesystem *";

JSONArray aux = FederationUtil.getJmx (requête, adresse);

si (aux! = null) {

pour (int i = 0; i <aux.length (); i ++) {

JSONObject jsonObject = aux.getJSONObject (i);

String name = jsonObject.getString ("name");

if (name.equals ("Hadoop: service = NameNode, name = FSNamesystemState")) {{

report.setDatanodeInfo (

jsonObject.getInt ("NumLiveDataNodes"),

jsonObject.getInt ("NumDeadDataNodes"),

jsonObject.getInt ("NumDecommissioningDataNodes"),

jsonObject.getInt ("NumDecomLiveDataNodes"),

jsonObject.getInt ("NumDecomDeadDataNodes"));

} else if (name.equals (

"Hadoop: service = NameNode, name = FSNamesystem")) {

report.setNamesystemInfo (

jsonObject.getLong ("CapacityRemaining"),

jsonObject.getLong ("CapacityTotal"),

jsonObject.getLong ("FilesTotal"),

jsonObject.getLong ("BlocksTotal"),

jsonObject.getLong ("MissingBlocks"),

jsonObject.getLong ("PendingReplicationBlocks"),

jsonObject.getLong ("UnderReplicatedBlocks"),

jsonObject.getLong ("PendingDeletionBlocks"),

jsonObject.getLong ("ProvidedCapacityTotal"));

}

}

}

} catch (Exception e) {

LOG.error ("Impossible d'obtenir les statistiques de {} avec JMX", getNamenodeDesc (), e);

}

}


8.3. Format de données Heartbeat


Le routeur écrit les données de pulsation détectées de chaque NameNode dans ZooKeeper. Chaque NameNode a un Znode, qui enregistre l’état d’un NameNode signalé par le routeur actuel.


Le répertoire racine du nœud dans ZooKeeper est le suivant: / hdfs-federation / MembershipState


Un NameNode spécifique est nommé comme suit: nnid-nsid-routerid


[zk:] ls / hdfs-federation / MembershipState

34-hacluster-8-5-150-12_25019 , 34-hacluster-8-5-153-15_25019, 34-hacluster-8-5-164-10_25019, 35-hacluster-8-5-150-12_25019 , 35 -hacluster-8-5-153-15_25019, 35-hacluster-8-5-164-10_25019, 70-ns1-8-5-150-12_25019 , 70-ns1-8-5-153-15_25019, 70-ns1 -8-5-164-10_25019, 71-ns1-8-5-150-12_25019, 71-ns1-8-5-153-15_25019, 71-ns1-8-5-164-10_25019]


Après avoir collecté des informations sur le signal de pulsation NameNode, le routeur les écrit dans ZooKeeper. Si le NameNode existe dans ZooKeeper, le routeur met à jour les données dans ZooKeeper. Si le NameNode n'existe pas, le routeur crée le NameNode, puis écrit les informations de pulsation dans le nœud.


9. RouterHeartbeatService


RouterHeartbeatService met à jour périodiquement les informations d'état du routeur dans le magasin d'état.


9.1. Paramètres associés


dfs.federation.router.heartbeat-state.interval


Indique l'intervalle pour signaler l'état du routeur. La valeur par défaut est 5s .


9.2. Messages de pulsation du routeur


Les informations de pulsation sur le routeur incluent: adresse IP, heure de démarrage, statut et version de compilation du routeur.


org.apache.hadoop.hdfs.server.federation.store.records.RouterState # newInstance (java.lang.String, long, org.apache.hadoop.hdfs.server.federation.router.RouterServiceState)

public statique RouterState newInstance (String addr, long startTime,

État RouterServiceState) {

RouterState record = newInstance ();

record.setDateStarted (startTime);

record.setAddress (addr);

record.setStatus (statut);

record.setCompileInfo (FederationUtil.getCompileInfo ());

record.setVersion (FederationUtil.getVersion ());

rapport de retour;

}


9.3. Format de données Heartbeat


Les informations sur l'état du routeur sont écrites dans ZooKeeper.


Le répertoire racine de ZooKeeper est le suivant: / hdfs-federation / RouterState


Znode est nommé comme suit: adresse IP du routeur (ID du routeur)


Les données dans le Znode sont la valeur après la conversion des informations d'état du routeur au format octet.


[zk] ls / hdfs-federation / RouterState

[8-5-150-12_25019, 8-5-153-15_25019, 8-5-164-10_25019, 8-5-214-10_25019, 8-5-214-12_25019, 8-5-214-3_25019, 8 -5-214-5_25019, 8-5-214-9_25019]

[zk] get / hdfs-federation / RouterState / 8-5-150-12_25019

CNQisJ / 1LBCarqF

[zk] stat / hdfs-federation / RouterState / 8-5-150-12_25019

cZxid = 0x10000080b

ctime = mar 27 nov. 14h47:19 GMT + 08:00 2018

mZxid = 0x100c6de91

mtime = ven 14 déc 16h55:06 GMT + 08:00 2018

pZxid = 0x10000080b

cversion = 0

dataVersion = 28573

aclVersion = 0

ephemeralOwner = 0x0

longueur de données = 152

numChildren = 0

[zk: 8.5.214.9:24002(CONNECTED) 9]


10. Service de mise à jour de quota de routeur


Mettez régulièrement à jour l'utilisation du quota du chemin d'accès global du quota et mettez à jour les données du cache local et du magasin d'état (ZooKeeper).

Le cache local du quota de routeur est géré par RouterQuotaManager.


10.1. Paramètres associés


dfs.federation.router.quota-cache.update.interval


Indique l'intervalle de mise à jour du quota. L'intervalle par défaut est 1 minute.


10.2 Procédure de mise à jour des quotas


1)      Connectez-vous au magasin d'état pour obtenir toutes les tables montées.


2)      Parcourez la liste des points de montage pour lesquels le quota est configuré.


3)      Utilisez les données obtenues à l'étape 1 pour mettre à jour les informations de cache dans le quotaManager de cache.


4)      Parcourez les points de montage pour lesquels le quota est configuré.


Obtenez l'utilisation du quota pour tous les points de montage.


Mettez à jour la valeur du cache quotaManager.


Si la nouvelle valeur est différente de l'ancienne, ajoutez le point de montage à la liste à mettre à jour.


5)      Connectez-vous au magasin d'état et mettez à jour les points de montage dans la liste à mettre à jour.


11. Surveillance JMX


11.1. Surveillance liée au RPC


103451peeakhqeqkktnzmn.png? Image.png


11.1.1. RpcQueueTimeAvgTime

Temps d'attente de la file d'attente RPC = Heure à laquelle RPCServer commence à traiter une demande du client - Heure à laquelle RPCServer reçoit la demande du client

Unité: Milliseconde (ms)


org.apache.hadoop.ipc.ProtobufRpcEngine.Server.ProtoBufRpcInvoker # call


103502xnvwzb2bhrgwjvvy.png? Image.png


11.1.2 RpcProcessingTimeAvgTime


Temps de traitement RPC = Heure à laquelle RPCServer termine le traitement d'une demande du client - Heure à laquelle RPCServer commence à traiter une demande du client


Unité: Milliseconde (ms)


org.apache.hadoop.ipc.ProtobufRpcEngine.Server.ProtoBufRpcInvoker # call


103510o62mbwwypo45n5b2.png? Image.png


11.1.3 ProcessingAvgTime


Heure utilisée par le routeur pour traiter une demande = Heure à laquelle la demande est transmise par le routeur au NameNode - Heure à laquelle la demande est reçue du client


Unité: Nanoseconde (ns)


org.apache.hadoop.hdfs.server.federation.metrics.FederationRPCPerformanceMonitor # getProcessingTime


103518pzcpti1rinchnnrq.png? Image.png


11.1.4 ProxyAvgTime


Heure de demande de l'agent de routeur = Heure à laquelle le NameNode envoie le résultat de la demande au routeur - Heure à laquelle le routeur commence à transférer la demande au NameNode


Unité: Nanoseconde (ns)


org.apache.hadoop.hdfs.server.federation.metrics.FederationRPCPerformanceMonitor # proxyOpComplete


org.apache.hadoop.hdfs.server.federation.metrics.FederationRPCPerformanceMonitor # getProxyTime


103528ez00vmfu23i9efff.png? Image.png


11.1.5 Intervalle de mise à jour JMX


La mise à jour JMX est effectuée toutes les 30 secondes, mais aucun paramètre n'est trouvé.


Après vérification du journal, il est constaté que le journal est appelé une fois toutes les 30 secondes.


103536vs176d22msh682ll.png? Image.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