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.
- 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.
- Vous pouvez exécuter ces fonctions d'aide uniquement à partir d'une méthode prédéfinie dans le script Python.
- Python 2.7 est la version python prise en charge dans le script Python.
- 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 Par exemple : |
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 : |
|
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, |
|
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 :
|
|
JMX distant | updateRemoteJmx (service_names=None, component_names_mapping=None, enable=True) |
Cette fonction d'aide active ou désactive la mesure remoteJMX.
|
getRemoteJmxInfo () |
Cette fonction d'aide renvoie :
|
|
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 Exemple :
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 Exemple :
|
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.
#!/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()
#!/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()
#!/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()
#!/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)
#!/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)
#!/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)
#!/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))