Python-basierte Bootstrap-Helper-Funktionen

Python-skriptbasierte Bootstrap-Helper-Funktionen sind zum Aktualisieren von Ambari-Konfigurationen in Big Data Service vorhanden.

Diese Helper-Funktionen helfen Ihnen:
  • Konfiguration einer Hadoop-Komponente im Cluster aktualisieren
  • Aktualisieren der Konfiguration für einen bestimmten Host oder eine bestimmte Hostgruppe
  • Rufen Sie den Konfigurationswert ab, und ergreifen Sie Maßnahmen basierend auf dem Wert
  • Konfiguration aus einem Konfigurationstyp exportieren (Beispiel: HDFS core-site.xml)
  • Fügen Sie den Masterknoten in einem HA-Cluster Komponenten wie Zookeeper, Namenode und Resource Manager hinzu.
  • Entfernen Sie Komponenten wie DataNode und NodeManager.
Hinweis

  1. Sie können diese Helper-Funktionen nur mit einer vordefinierten Methode im Python-Skript ausführen.
  2. Python 2.7 ist die unterstützte python-Version im Python-Skript.
  3. Sie müssen das Python-Skript auf eigene Gefahr verwalten, da es zum Herunterfahren des Microservice führen kann.

Informationen zum Ausführen eines Bootstrap-Skripts finden Sie unter Running the Bootstrap Script.

Weitere Informationen zu Python-Bootstrap-Skript-Helper-Funktionen finden Sie unter:

Bootstrap Python-Skript - Helper-Funktionen

Weitere Informationen zum Python-Bootstrap-Skript finden Sie unter Python-basierte Bootstrap-Helper-Funktionen.

Beispiele für Python-basierte Bootstrap-Helper-Funktionen finden Sie unter Python-Skriptbeispiele.

Informationen zum Ausführen eines Bootstrap-Skripts finden Sie unter Running the Bootstrap Script.

Kategorie Helper-Funktion Funktionalität
Konfigurationsgruppen createConfigGroup(service_name, hosts, config_group="Default") Diese Helper-Funktion erstellt eine Konfigurationsgruppe für einen Service mit einer Liste von Hosts. Sie müssen den Namen service_name, die Liste von hosts und config_group als Eingabe angeben.
removeConfigGroup(service_name, config_group="Default") Diese Helper-Funktion entfernt die Konfigurationsgruppe in einem Service. Sie müssen den Namen service_name und config_group als Eingabe angeben.
addHostsInConfigGroup(service_name, hosts, config_group="Default" Diese Helper-Funktion fügt Hosts zur Konfigurationsgruppe in einem Service mit einer Liste von Hosts hinzu. Sie müssen service_name, eine Liste von hosts und einen config_group-Namen als Eingabe angeben.
removeHostsInConfigGroup(service_name, hosts, config_group="Default" Diese Helper-Funktion entfernt Hosts in der Konfigurationsgruppe in einem Service mit einer Liste von Hosts. Sie müssen service_name, eine Liste von hosts und einen config_group-Namen als Eingabe angeben.
listConfigGroups(service_name) Diese Helper-Funktion zeigt alle Konfigurationsgruppen in einem Service an. Sie müssen service_name angeben.
getHostsInConfigGroup(service_name, config_group="Default" Diese Helper-Funktion zeigt alle Hosts in der config_group in einem Service an. Sie müssen config_group und service_name angeben.
importConfigGroup(service_name, from_config_group, to_config_group) Diese Helper-Funktion klont die Konfigurationen von einer Konfigurationsgruppe in eine andere Konfigurationsgruppe in einem Service. Sie müssen from_config_group, to_config_group und service_name angeben.
Konfiguration updateConfig(service_name, config_type, config_properties, config_group="Default", config_meta={})

Diese Helper-Funktion aktualisiert die Konfigurationseigenschaften in der Datei config_type von config_group in einem Service. Sie müssen den Servicenamen config_type, config_properties, config_group und config_meta angeben.

Hinweis: config_properties ist eine Zuordnung von Konfigurationsschlüssel- und Wertpaaren.

config_meta ist eine Zuordnung von Konfigurationsschlüssel- und Konfigurationsmetadaten. Mögliche Typwerte in Konfigurationsmeta sind PASSWORD und TEXT mit dem Standardwert TEXT.

Beispiel: 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") Diese Helper-Funktion entfernt die Konfiguration aus der Datei config_type von config_group in einem Service. Sie müssen config_group, config_type, config_name und service_name angeben.

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

getConfig(service_name, config_type, config_name, config_group="Default") Diese Helper-Funktion zeigt den Wert der Konfigurationseigenschaft config_name in der Datei config_type eines config_group in einem Service an. Sie müssen config_group, config_type, config_name und service_name angeben.
restartStaleConfig() Diese Helper-Funktion startet die Services neu, bei denen Konfigurationen veraltet sind.
exportConfig(service_name, config_type, config_group="Default") Diese Helper-Funktion zeigt alle Konfigurationen in der Datei config_type von config_group in einem Service an. Sie müssen config_group, config_type und service_name angeben.
Shellausführung runShellCommandOnAllNodes(command) Diese Helper-Funktion führt den Shell-Befehl auf allen Clusterknoten aus. Sie müssen das command angeben.
runShellCommandOnNode(command, host) Diese Helper-Funktion führt den Shell-Befehl auf dem angeforderten Host aus. Sie müssen command und host angeben.
Utility getClusterName() Zeigt den Clusternamen an.
getMasterNodesIps() Zeigt Masterknoten-LPS an.
getWorkerNodesIps() Zeigt Worker-Knoten-LPS an.
getUtilityNodesIps() Zeigt Utilityknoten-LPS an.
getQueryServerNodesIps() Zeigt Abfrageserverknoten-LPS an.
getComputeOnlyWorkerNodesIps() Zeigt reine Compute-Worker-Knoten-LPS an.
getEdgeNodesIps() Zeigt Edge-Knoten-LPS an.
getAllNodesIps() Zeigt alle Knoten-LPS an.
getEventType() Zeigt den Ereignistyp an. Mögliche Ereignistypwerte sind CreateBdsInstance, AddWorkerNodes, StartBdsInstance, ChangeShape, on-demand.
getLogger()

Diese Helper-Funktion gibt die Logger-Instanz zurück, mit der Sie Informationen und Fehlerlogs protokollieren können. Beispiel: getLogger().info("log info msg")

get_last_added_host_names()

Gibt die Python-Liste der Hostnamen zurück, die beim letzten Vorgang "Knoten hinzufügen" hinzugefügt wurden.

Gibt "Keine" zurück, wenn dem Cluster keine neuen Hosts hinzugefügt werden.

get_last_added_host_ips()

Gibt die Python-Liste der privaten IPs zurück, die in den letzten "Knoten hinzufügen"-Vorgängen hinzugefügt wurden.

Gibt "Keine" zurück, wenn dem Cluster keine neuen Hosts hinzugefügt werden.

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

Mit dieser Helper-Funktion werden Typ, Pfad und Payload der Ambari-REST-API-basierten Methode ausgeführt. Sie müssen method, path, payload(sofern vorhanden), params(sofern vorhanden) und headers angeben.

Parameter:

  • Methode: Mögliche Werte: GET, POST, PUT und DELETE.
  • Pfad: Relativer Pfad
  • Payload: Anforderungs-Payload, falls vorhanden
  • Parameter: Parameter anfordern Falls vorhanden
  • Header: Anforderungsheader, falls vorhanden
Remote-JMX updateRemoteJmx(service_names=None, component_names_mapping=None, enable=True) Diese Helper-Funktion aktiviert oder deaktiviert die Metrik remoteJMX.
  • service_names: Optionale Liste der Services, die mit remoteJMX, service_names in <remote-jmx-section> aktiviert werden sollen. Wenn kein Wert übergeben wird, wird der Vorgang auf alle Services angewendet
  • service_to_components: Optionale Zuordnung von Service zu Komponenten. Wenn kein Wert übergeben wird, wird der Vorgang auf alle Komponenten der ausgewählten Services angewendet.
  • enable: True, um remoteJMX zu aktivieren, False, um remoteJMX zu deaktivieren.
getRemoteJmxInfo() Diese Helper-Funktion gibt Folgendes zurück:
  • Servicekarte → Komponente → remoteJMX Info
  • Diese Funktion gibt dieses Mapping nur für Services zurück, die in der Ambari-UI verfügbar sind.
Komponenten hinzufügen add_component_to_host(request_dict)

Diese Funktion verwendet ein Python-Dictionary und fügt Komponenten zu den im Dictionary genannten Hosts hinzu. Unterstützte Komponenten sind Namenode(NN), ResourceM,anager(RM) und Zookeeper_Server.

Beispiel:

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

Achtung: Die Unterstützung für NN und RM gilt nur für HA-Cluster und für die Hosts mit Standardkonfigurationsgruppen.

Komponenten entfernen remove_component_from_host(request_dict)

Diese Funktion verwendet ein Python-Wörterbuch und entfernt Komponenten aus den im Dictionary genannten Hosts mit Timeouts. Unterstützte Komponenten sind Datanode und NodeManager.

Beispiel:

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

Liste der unterstützten Servicenamen = [HDFS, YARN, MAPREDUCE2, TEZ, HIVE, OOZIE, ZOOKEEPER, AMBARI_METRICS, RANGER, HUE, KAFKA, KERBEROS, ODHUTILS, SPARK3, HBASE, TRINO, REGISTRY, FLINK, JUPYTERHUB]

Liste der unterstützten Ereignistypen = ["CreateBdsInstance", "AddWorkerNodes", "StartBdsInstance", "ChangeShape"] Typ = ["PASSWORD", "TEXT"]

Python-Skriptbeispiele

Weitere Informationen zu den Python-Helper-Funktionen finden Sie unter Bootstrap-Python-Skript-Helper-Funktionen.

Beispiel: Benutzerdefiniertes Bootstrap-Python-Skript mit Helper-Funktionen zum Aktualisieren von Ambari-Konfigurationen in Standardkonfigurationsgruppe
#!/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()
Beispiel: Benutzerdefiniertes Bootstrap-Python-Skript mit Helper-Funktionen für Shellbefehlsausführung
#!/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()
Beispiel: Benutzerdefinierte Bootstrap-Python-Skriptkonfiguration mit Kennworttyp in Helper-Funktion 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() 
Beispiel: Benutzerdefiniertes Bootstrap-Python-Skript mit Helper-Funktionen zum Hinzufügen neuer Komponenten zu den zuletzt hinzugefügten Hosts
#!/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)
Beispiel: Benutzerdefiniertes Bootstrap-Python-Skript mit Helper-Funktionen zum Hinzufügen neuer Komponenten zur benutzerdefinierten Hostliste
#!/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)
Beispiel: Benutzerdefiniertes Bootstrap-Python-Skript mit Helper-Funktionen zum Entfernen von Komponenten aus der benutzerdefinierten Hostliste
#!/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)
Beispiel: Benutzerdefiniertes Bootstrap-Python-Skript mit Helper-Funktion zur Ausführung von Ambari-REST-API-basiertem Methodentyp, Pfad und Payload
#!/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))