Fonctions de l'assistant Bootstrap basé sur Python

Des fonctions d'aide au démarrage basées sur un script Python existent pour mettre à jour les configurations Ambari dans Big Data Service.

Ces fonctions d'aide vous aident à :
  • Mettre à jour la configuration d'un composant Hadoop dans le cluster
  • 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 maîtres d'un cluster HA.
  • Supprimez des composants tels que DataNode et NodeManager.
Remarque

  1. Vous pouvez exécuter ces fonctions d'aide uniquement à 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 de démarrage, reportez-vous à la section Running the Bootstrap Script.

Pour plus d'informations sur les fonctions d'aide de script bootstrap Python, reportez-vous aux sections suivantes :

Fonctions helper de script Python de démarrage

Pour plus d'informations sur le script de démarrage Python, reportez-vous à Fonctions d'application d'aide de démarrage Python.

Pour obtenir des exemples de fonction d'aide bootstrap basée sur Python, reportez-vous à Exemples de script Python.

Pour exécuter un script de démarrage, reportez-vous à la section Running the Bootstrap Script.

catégorie Fonction d'aide Fonctionnalité :
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 fournir en entrée les noms service_name, hosts et config_group.
removeConfigGroup(service_name, config_group="Default") Cette fonction d'aide supprime le groupe de configuration dans un service. Vous devez fournir les noms service_name et config_group en 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 indiquer service_name, la liste de hosts et le nom config_group en entrée.
removeHostsInConfigGroup(service_name, hosts, config_group="Default" Cette fonction d'aide supprime les hôtes du groupe de configuration dans un service avec une liste d'hôtes. Vous devez indiquer service_name, la liste de hosts et le nom config_group en 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 dans le fichier config_type de config_group dans un service. Vous devez fournir le nom de service, config_type, config_properties, config_group et config_meta.

Remarque : config_properties est une correspondance de paires clé-valeur de configuration.

config_meta correspond à la correspondance de la clé de configuration et des 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 propriété de configuration de config_name dans le fichier config_type d'un élément 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 dont les configurations sont obsolètes.
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 du shell runShellCommandOnAllNodes(command) Cette fonction d'aide exécute la commande shell sur tous les noeuds du cluster. Vous devez indiquer le paramètre command.
runShellCommandOnNode(command, host) Cette fonction d'aide exécute la commande shell sur l'hôte demandé. Vous devez fournir les éléments command et host.
Utilité getClusterName() Affiche le nom du cluster.
getMasterNodesIps() Affiche les Lps des noeuds maîtres.
getWorkerNodesIps() Affiche lps des noeuds de processus actif.
getUtilityNodesIps() Affiche lps du noeud utilitaire.
getQueryServerNodesIps() Affiche lps des noeuds de serveur de requête.
getComputeOnlyWorkerNodesIps() Affiche uniquement le calcul des longueurs de noeud de processus actif.
getEdgeNodesIps() Affiche les Lps des noeuds d'axe.
getAllNodesIps() Affiche tous les LPS des noeuds.
getEventType() Affiche le type de l'événement. Les valeurs de type d'événement possibles sont CreateBdsInstance, AddWorkerNodes, StartBdsInstance, ChangeShape, on-demand.
getLogger()

Cette fonction d'aide renvoie l'instance de journaliseur 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()

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

Renvoie None si aucun nouvel hôte n'est ajouté au cluster.

get_last_added_host_ips()

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

Renvoie None si aucun nouvel hôte n'est ajouté au cluster.

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

Cette fonction d'aide exécute le type de méthode, le chemin et la charge utile basés sur l'API REST Ambari. Vous devez fournir method, path, payload(le cas échéant), params(le cas échéant) et headers.

Paramètres :

  • méthode : valeurs possibles : GET, POST, PUT et DELETE.
  • chemin : chemin relatif
  • charge utile : charge utile de 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é dans <remote-jmx-section>. Si aucune valeur n'est transmise, l'opération est appliquée à tous les services
  • service_to_components : mise en correspondance du service facultatif avec les composants. Si aucune valeur n'est transmise, l'opération est appliquée à tous les composants des services sélectionnés.
  • enable : True pour activer remoteJMX, False pour désactiver remoteJMX.
getRemoteJmxInfo() Cette fonction d'aide renvoie :
  • Carte du service → composant → remoteJMX info
  • Cette fonction renvoie uniquement ce mappage pour les services disponibles dans l'interface utilisateur 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 clusters haute disponibilité et les hôtes disposant de groupes de configuration par défaut.

enlever des composants remove_component_from_host(request_dict)

Cette fonction prend un dictionnaire Python et enlève les composants des hôtes mentionnés dans le dictionnaire avec des délais d'attente. 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, VIHE, 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 Python, reportez-vous à Fonctions d'aide de script Python Bootstrap.

Exemple : script Python bootstrap 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 bootstrap personnalisé avec fonctions d'aide pour l'exécution de la commande shell
#!/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 bootstrap personnalisé avec 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 de démarrage 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 bootstrap 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 bootstrap 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 de démarrage personnalisé avec fonction helper pour exécuter le type de méthode, le chemin et la charge utile 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))