Fonctions d'aide d'amorçage basées sur Python

Des fonctions d'aide au démarrage basées sur un script Python existent pour mettre à jour les configurations Ambari dans le service de mégadonnées.

Ces fonctions d'aide vous aident à :
  • Mettre à jour la configuration d'un composant Hadoop dans la grappe
  • Mettre à jour la configuration applicable à un hôte ou à un groupe d'hôtes particulier
  • Obtenir la valeur de configuration et effectuer des actions en fonction de la valeur
  • Exporter la configuration à partir d'un type de configuration (par exemple, HDFS core-site.xml)
  • Ajoutez des composants tels que Zookeeper, Namenode et Resource Manager aux noeuds principaux d'une grappe hautement disponible.
  • Supprimez des composants tels que DataNode et NodeManager.
Note

  1. Vous ne pouvez exécuter ces fonctions d'aide qu'à partir d'une méthode prédéfinie dans le script Python.
  2. Python 2.7 est la version python prise en charge dans le script Python.
  3. Vous devez gérer le script Python à vos propres risques, car il peut entraîner l'arrêt du microservice.

Pour exécuter un script d'amorçage, voir Exécution du script d'amorçage.

Pour plus d'informations sur les fonctions d'aide de script d'amorçage Python, voir :

Fonctions d'aide des scripts Python d'amorçage

Pour plus d'informations sur le script d'amorçage Python, voir Fonctions d'aide d'amorçage basées sur Python.

Pour des exemples de fonction d'aide d'amorçage basée sur Python, voir Exemples de script Python.

Pour exécuter un script d'amorçage, voir Exécution du script d'amorçage.

Catégorie Fonction d'aide Fonction
Groupes de configuration createConfigGroup(service_name, hosts, config_group="Default") Cette fonction d'aide crée un groupe de configuration pour un service avec une liste d'hôtes. Vous devez indiquer service_name, la liste hosts et le nom config_group en tant qu'entrée.
removeConfigGroup(service_name, config_group="Default") Cette fonction d'aide supprime le groupe de configuration d'un service. Vous devez fournir les noms service_name et config_group en tant qu'entrée.
addHostsInConfigGroup(service_name, hosts, config_group="Default" Cette fonction d'aide ajoute des hôtes au groupe de configuration dans un service avec une liste d'hôtes. Vous devez fournir service_name, la liste hosts et le nom config_group en tant qu'entrée.
removeHostsInConfigGroup(service_name, hosts, config_group="Default" Cette fonction d'aide supprime les hôtes du groupe de configuration d'un service avec une liste d'hôtes. Vous devez fournir service_name, la liste hosts et le nom config_group en tant qu'entrée.
listConfigGroups(service_name) Cette fonction d'aide affiche tous les groupes de configuration d'un service. Vous devez fournir service_name.
getHostsInConfigGroup(service_name, config_group="Default" Cette fonction d'aide affiche tous les hôtes dans config_group dans un service. Vous devez fournir config_group et service_name.
importConfigGroup(service_name, from_config_group, to_config_group) Cette fonction d'aide clone les configurations d'un groupe de configuration vers un autre groupe de configuration dans un service. Vous devez fournir from_config_group, to_config_group et service_name.
Configuration updateConfig(service_name, config_type, config_properties, config_group="Default", config_meta={})

Cette fonction d'aide met à jour les propriétés de configuration au fichier config_type de config_group dans un service. Vous devez fournir un nom de service, config_type, config_properties, config_group et config_meta.

Note : config_properties est un mappage de paires clé-valeur de configuration.

config_meta est un mappage de clé de configuration et de métadonnées de configuration. Les valeurs de type possibles dans les métadonnées de configuration sont PASSWORD et TEXT avec la valeur par défaut TEXT.

Par exemple : helper.updateConfig(config_group="test", service_name="HDFS", config_type="core-site", config_properties={"fs.trash.interval": "400", "test.password":"XXXX"}, config_meta={"test.password": {"type":"PASSWORD"}})

removeConfig(service_name, config_type, config_name, config_group="Default") Cette fonction d'aide supprime la configuration du fichier config_type de config_group dans un service. Vous devez fournir config_group, config_type, config_name et service_name.

Par exemple : helper.removeConfig(service_name="HDFS", config_type="core-site", config_name="fs.trash.interval")

getConfig(service_name, config_type, config_name, config_group="Default") Cette fonction d'aide affiche la valeur de la propriété de configuration config_name dans le fichier config_type d'un config_group dans un service. Vous devez fournir config_group, config_type, config_name et service_name.
restartStaleConfig() Cette fonction d'aide redémarre les services où les configurations sont périmées.
exportConfig(service_name, config_type, config_group="Default") Cette fonction d'aide affiche toutes les configurations du fichier config_type de config_group dans un service. Vous devez fournir config_group, config_type et service_name.
Exécution de l'interpréteur de commandes runShellCommandOnAllNodes(command) Cette fonction d'aide exécute la commande shell sur tous les noeuds du cluster. Vous devez fournir command.
runShellCommandOnNode(command, host) Cette fonction d'aide exécute la commande shell sur l'hôte demandé. Vous devez fournir les valeurs command et host.
Services publics getClusterName() Affiche le nom de la grappe.
getMasterNodesIps() Affiche les noeuds principaux.
getWorkerNodesIps() Affiche les noeuds de travail.
getUtilityNodesIps() Affiche lps de noeud d'utilitaire.
getQueryServerNodesIps() Affiche lps des noeuds du serveur d'interrogation.
getComputeOnlyWorkerNodesIps() Affiche les noeuds de travail de calcul seulement.
getEdgeNodesIps() Affiche lps de noeud d'arête.
getAllNodesIps() Affiche lps de tous les noeuds.
getEventType() Affiche le type d'événement. Les valeurs de type d'événement possibles sont CreateBdsInstance, AddWorkerNodes, StartBdsInstance, ChangeShape, on-demand.
getLogger()

Cette fonction d'aide retourne l'instance de l'enregistreur automatique que vous pouvez utiliser pour journaliser les journaux d'informations et d'erreurs. Par exemple, getLogger().info("log info msg")

get_last_added_host_names()

Retourne la liste Python des noms d'hôte ajoutés lors de la dernière opération "Ajouter un noeud".

Retourne Aucun, si aucun nouvel hôte n'est ajouté à la grappe.

get_last_added_host_ips()

Retourne la liste Python des adresses IP privées ajoutées dans les dernières opérations d'ajout de noeud.

Retourne Aucun, si aucun nouvel hôte n'est ajouté à la grappe.

executeAmbariFunc(method, path, payload=None, params=None, headers=None)

Cette fonction d'aide exécute le type de méthode, le chemin et les données utiles basés sur l'API REST Ambari. Vous devez fournir method, path, payload(Si oui), params(Si oui) et headers.

Paramètres :

  • Méthode : Valeurs possibles : GET, POST, PUT et DELETE.
  • path : Chemin relatif
  • données utiles : Données utiles de la demande, le cas échéant
  • params : Paramètres de demande Le cas échéant
  • en-têtes : en-têtes de demande, le cas échéant
JMX distant updateRemoteJmx(service_names=None, component_names_mapping=None, enable=True) Cette fonction d'aide active ou désactive la mesure remoteJMX.
  • service_names : Liste facultative des services à activer avec remoteJMX, service_names mentionnée dans <remote-jmx-section>. Si aucune valeur n'est transmise, l'opération est appliquée à tous les services
  • service_to_components : Mappage facultatif du service aux composants. Si aucune valeur n'est transmise, l'opération est appliquée à tous les composants des services sélectionnés.
  • enable : Vrai pour activer remoteJMX, Faux pour désactiver remoteJMX.
getRemoteJmxInfo() Cette fonction d'aide retourne :
  • Carte du service → composant → remoteJMX info
  • Cette fonction retourne uniquement ce mappage pour les services disponibles dans l'interface utilisateur d'Ambari.
Ajouter des composants add_component_to_host(request_dict)

Cette fonction prend un dictionnaire Python et ajoute des composants aux hôtes mentionnés dans le dictionnaire. Les composants pris en charge sont Namenode(NN), ResourceM,anager(RM) et Zookeeper_Server.

Exemple :

request_dict = {"NAMENODE": {
                "hosts": ["h1", "h2"]
                },
                "RESOURCEMANAGER": {
                "hosts": ["h1", "h2"]
                }}

Attention : La prise en charge de NN et RM ne concerne que les grappes HA et les hôtes ayant des groupes de configuration par défaut.

Supprimer des composants remove_component_from_host(request_dict)

Cette fonction utilise un dictionnaire Python et supprime les composants des hôtes mentionnés dans le dictionnaire avec des temporisations. Les composants pris en charge sont Datanode et NodeManager.

Exemple :

request_dict = {"DATANODE": {
                "hosts": ["h1", "h2"],
                "timeout_minutes": 30(default 30)
                },
                "NODEMANAGER": {
                "hosts": ["h1", "h2"]
                }}

liste des noms de service pris en charge = [HDFS, YARN, MAPREDUCE2, TEZ, HIVE, OOZIE, ZOOKEEPER, AMBARI_METRICS, RANGER, HUE, KAFKA, KERBEROS, ODHUTILS, SPARK3, HBASE, TRINO, REGISTRY, FLINK, JUPYTERHUB]

liste des types d'événement pris en charge = ["CreateBdsInstance", "AddWorkerNodes", "StartBdsInstance", "ChangeShape"] type = ["PASSWORD", "TEXT"]

Exemples de scripts Python

Pour plus d'informations sur les fonctions d'aide de Python, voir Fonctions d'aide de script Python d'amorçage.

Exemple : Script Python d'amorçage personnalisé avec fonctions d'aide pour mettre à jour les configurations Ambari dans le groupe de configuration par défaut
#!/usr/bin/env python2.7
                    
                    def execute(helper):
                    # custom logger
                    logger = helper.getLogger()
                    
                    logger.info('Testing Config Helper functions')
                    
                    # Update config_properties in the Default config group of config_type file core-site in service HDFS
                    
                    helper.updateConfig(service_name="HDFS", config_type="core-site", config_properties={"fs.trash.interval": "400"})
                    
                    # Remove config property from Default config group of config_type core-site
                    
                    helper.removeConfig(service_name="HDFS", config_type="core-site", config_name="fs.trash.interval")
                    
                    # Get config value from Default config group of config_type file core-site in service HDFS
                    
                    config_value = helper.getConfig(service_name="HDFS", config_type="core-site", config_name="fs.trash.interval")
                    
                    # Export configs from Default config group of config_type file core-site in service HDFS
                    
                    helper.exportConfig(service_name="HDFS", config_type="core-site")
                    
                    # Restart stale config
                    
                    helper.restartStaleConfig()
Exemple : Script Python d'amorçage personnalisé avec fonctions d'aide pour l'exécution de commande d'interpréteur de commandes
#!/usr/bin/env python2.7
                    
                    def execute(helper):
                    logger = helper.getLogger()
                    
                    logger.info("Custom logger logs are available in '/var/logs/oracle/bds/bootstrap/' directory of mn0 node")
                    
                    logger.info("Execute get utility nodes ips")
                    
                    utility_node_ips = helper.getUtilityNodesIps()
                    
                    logger.info("Execute shell command on utility node")
                    
                    helper.runShellCommandOnNode(command='pwd', host=utility_node_ips[0])
                    
                    logger.info("Execute shell command for on-demand event type")
                    
                    event_type = helper.getEventType()
                    
                    if event_type == "on-demand":
                    helper.runShellCommandOnNode(command='ls', host=utility_node_ips[0])
                    
                    
                    logger.info("Create config group test in service HDFS")
                    
                    helper.createConfigGroup(config_group="test", service_name="HDFS", hosts=[])
                    
                    logger.info("Add Worker nodes as hosts to above created config group test in service HDFS")
                    
                    worker_node_ips = helper.getWorkerNodesIps()
                    
                    helper.addHostsInConfigGroup(service_name="HDFS", hosts=worker_node_ips, config_group="test")
                    
                    logger.info("Update config_properties in the config group test of config_type file core-site in service HDFS")
                    
                    helper.updateConfig(config_group="test", service_name="HDFS", config_type="core-site",
                    config_properties={"fs.trash.interval": "400"})
                    
                    logger.info("Restart stale configs")
                    
                    helper.restartStaleConfig()
Exemple : Configuration de script Python d'amorçage personnalisé avec le type de mot de passe dans la fonction d'aide updateConfig
#!/usr/bin/env python2.7
                
                def execute(helper):
                logger = helper.getLogger()
                
                logger.info("Executing getWorkerNodesIps")
                
                worker_node_ips = helper.getWorkerNodesIps()
                
                logger.info("Executing createConfigGroup")
                
                helper.createConfigGroup(service_name="HDFS", config_group="testConfigGroup", 
                hosts=worker_node_ips)
                
                logger.info("Executing updateConfigGroup")
                
                helper.updateConfig(config_group="test", service_name="HDFS", config_type="core-site", 
                config_properties={"fs.trash.interval": "1000"})
                
                logger.info("Executing updateConfig")
                
                helper.updateConfig(service_name="HDFS", config_type="core-site", config_properties=
                {"fs.trash.interval": "1000", "test.password": "TestPassword"}, config_meta={"test.password":
                {"type":"PASSWORD"}})
                
                logger.info("Executing restartStaleConfig")
                
                helper.restartStaleConfig() 
Exemple : Script Python d'amorçage personnalisé avec fonctions d'aide pour ajouter de nouveaux composants aux derniers hôtes ajoutés
#!/usr/bin/env python2.7
                
                def execute(helper):
                # custom logger
                logger = helper.getLogger()
                
                logger.info('Testing Config Helper functions')
                
                # Update config_properties in the Default config group of config_type file core-site in service HDFS
                
                hosts = helper.get_last_added_host_names()
                request_dict = {
                "NAMENODE": {
                "hosts": hosts
                },
                "RESOURCEMANAGER": {
                "hosts": hosts
                }
                }
                
                helper.add_component_to_host(request_dict)
Exemple : Script Python d'amorçage personnalisé avec fonctions d'aide pour ajouter de nouveaux composants à la liste d'hôtes personnalisée
#!/usr/bin/env python2.7
                
                def execute(helper):
                # custom logger
                logger = helper.getLogger()
                
                logger.info('Testing Config Helper functions')
                
                # Update config_properties in the Default config group of config_type file core-site in service HDFS
                
                request_dict = {
                "NAMENODE": {
                "hosts": ["hostname1", "hostname2"]
                },
                "RESOURCEMANAGER": {
                "hosts": ["hostname2", "hostname3"]
                }
                }
                
                helper.add_component_to_host(request_dict)
Exemple : Script Python d'amorçage personnalisé avec fonctions d'aide pour supprimer des composants de la liste d'hôtes personnalisée
#!/usr/bin/env python2.7
                
                def execute(helper):
                # custom logger
                logger = helper.getLogger()
                
                logger.info('Testing Config Helper functions')
                
                # Update config_properties in the Default config group of config_type file core-site in service HDFS
                
                request_dict = {
                "DATANODE": {
                "hosts": ["hostname1", "hostname2"],
                "timeout_minutes": 40#(in minutes)
                },
                "NODEMANAGER": {
                "hosts": ["hostname2", "hostname3"],
                "timeout_minutes": 40#(in minutes)
                }
                }
                
                helper.remove_component_from_host(request_dict)
Exemple : Script Python d'amorçage personnalisé avec fonction d'aide pour exécuter le type de méthode, le chemin et les données utiles basés sur l'API REST Ambari
#!/usr/bin/env python2.7
                def execute(helper):
                logger = helper.getLogger()
                logger.info("Executing executeAmbariFunc")
                response = helper.executeAmbariFunc(method='GET', path='clusters/<cluster_name>/services/')
                logger.info("response : " + str(response))