Funzioni di supporto bootstrap basate su Python

Esistono funzioni di applicazione di supporto bootstrap basate su script Python per aggiornare le configurazioni Ambari nel servizio Big Data.

Queste funzioni di supporto consentono di:
  • Aggiornare la configurazione di un componente Hadoop nel cluster
  • Aggiornare la configurazione applicabile a un determinato host o gruppo di host
  • Ottenere il valore di configurazione ed eseguire azioni in base al valore
  • Esporta la configurazione da un tipo di configurazione (ad esempio, HDFS core-site.xml)
  • Aggiungere componenti quali Zookeeper, Namenode e Resource Manager ai nodi principali in un cluster HA.
  • Rimuovere componenti quali DataNode e NodeManager.
Nota

  1. È possibile eseguire queste funzioni di supporto solo da un metodo predefinito nello script Python.
  2. Python 2.7 è la versione python supportata nello script Python.
  3. È necessario gestire lo script Python a proprio rischio perché può portare all'arresto dei microservizi.

Per eseguire uno script di bootstrap, vedere Esecuzione dello script di bootstrap.

Per ulteriori informazioni sulle funzioni di supporto degli script di bootstrap Python, vedere:

Funzioni di supporto per script Python Bootstrap

Per ulteriori informazioni sullo script bootstrap Python, vedere Funzioni di supporto bootstrap basate su Python.

Per esempi di funzioni di supporto del bootstrap basate su Python, vedere Esempi di script Python.

Per eseguire uno script di bootstrap, vedere Esecuzione dello script di bootstrap.

Categoria Funzione helper Funzionalità
Gruppi di configurazione createConfigGroup(service_name, hosts, config_group="Default") Questa funzione di supporto crea un gruppo di configurazione per un servizio con una lista di host. È necessario fornire come input il nome service_name, l'elenco hosts e il nome config_group.
removeConfigGroup(service_name, config_group="Default") Questa funzione di supporto rimuove il gruppo di configurazione in un servizio. È necessario fornire come input il nome service_name e config_group.
addHostsInConfigGroup(service_name, hosts, config_group="Default" Questa funzione di supporto aggiunge host al gruppo di configurazione in un servizio con una lista di host. È necessario fornire come input service_name, l'elenco di hosts e il nome config_group.
removeHostsInConfigGroup(service_name, hosts, config_group="Default" Questa funzione di supporto rimuove gli host nel gruppo di configurazione in un servizio con una lista di host. È necessario fornire come input service_name, l'elenco di hosts e il nome config_group.
listConfigGroups(service_name) Questa funzione di supporto visualizza tutti i gruppi di configurazione in un servizio. Devi inserire service_name.
getHostsInConfigGroup(service_name, config_group="Default" Questa funzione di supporto visualizza tutti gli host in config_group in un servizio. Voi dovete fornire config_group e service_name.
importConfigGroup(service_name, from_config_group, to_config_group) Questa funzione di supporto clona le configurazioni da un gruppo di configurazione a un altro gruppo di configurazione in un servizio. Dovete fornire from_config_group, to_config_group e service_name.
Configura updateConfig(service_name, config_type, config_properties, config_group="Default", config_meta={})

Questa funzione di supporto aggiorna le proprietà di configurazione nel file config_type di config_group in un servizio. Dovete fornire i nomi dei Servizi, config_type, config_properties, config_group e config_meta.

Nota: config_properties è una mappa di coppie chiave e valore di configurazione.

config_meta è la mappa della chiave di configurazione e dei metadati di configurazione. I possibili valori di tipo nel meta della configurazione sono PASSWORD e TEXT con il valore predefinito TEXT.

Ad esempio: 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") Questa funzione di supporto rimuove la configurazione dal file config_type di config_group in un servizio. Dovete fornire config_group, config_type, config_name e service_name.

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

getConfig(service_name, config_type, config_name, config_group="Default") Questa funzione di supporto visualizza il valore della proprietà di configurazione config_name nel file config_type di un file config_group in un servizio. Dovete fornire config_group, config_type, config_name e service_name.
restartStaleConfig() Questa funzione dell'applicazione di supporto riavvia i servizi in cui le configurazioni non sono più valide.
exportConfig(service_name, config_type, config_group="Default") Questa funzione di supporto visualizza tutte le configurazioni nel file config_type di config_group in un servizio. Dovete fornire config_group, config_type e service_name.
Esecuzione shell runShellCommandOnAllNodes(command) Questa funzione helper esegue il comando shell su tutti i nodi del cluster. È necessario specificare command.
runShellCommandOnNode(command, host) Questa funzione helper esegue il comando shell sull'host richiesto. Dovete fornire i valori command e host.
Utility getClusterName() Visualizza il nome del cluster.
getMasterNodesIps() Visualizza i nodi master lps.
getWorkerNodesIps() Visualizza i nodi di lavoro lps.
getUtilityNodesIps() Visualizza lps del nodo utility.
getQueryServerNodesIps() Visualizza i nodi del server di query lps.
getComputeOnlyWorkerNodesIps() Visualizza i secondi dei nodi di lavoro solo di computazione.
getEdgeNodesIps() Visualizza ips del nodo perimetrale.
getAllNodesIps() Visualizza tutti i nodi lps.
getEventType() Visualizza il tipo di evento. I valori possibili per il tipo di evento sono CreateBdsInstance, AddWorkerNodes, StartBdsInstance, ChangeShape, on-demand.
getLogger()

Questa funzione di supporto restituisce l'istanza del logger che è possibile utilizzare per registrare le informazioni e i log degli errori. Ad esempio, getLogger().info("log info msg")

get_last_added_host_names()

Restituisce la lista Python dei nomi host aggiunti nell'ultima operazione "Aggiungi nodo".

Restituisce Nessuno se non vengono aggiunti nuovi host al cluster.

get_last_added_host_ips()

Restituisce la lista Python degli IP privati aggiunti nelle ultime operazioni "Aggiungi nodo".

Restituisce Nessuno se non vengono aggiunti nuovi host al cluster.

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

Questa funzione di supporto esegue il tipo di metodo, il percorso e il payload basati sull'API REST Ambari. Dovete fornire method, path, payload(If Any), params(If Any) e headers.

Parameters:

  • metodo: valori possibili: GET, POST, PUT e DELETE.
  • percorso: percorso relativo
  • payload: Eventuale payload richieste
  • params: Richiedi params If any
  • intestazioni: eventuali intestazioni richiesta
JMX remoto updateRemoteJmx(service_names=None, component_names_mapping=None, enable=True) Questa funzione di supporto abilita o disabilita la metrica remoteJMX.
  • service_names: elenco facoltativo di servizi da abilitare con remoteJMX, service_names indicato in <remote-jmx-section>. Se non viene passato alcun valore, l'operazione viene applicata a tutti i servizi
  • service_to_components: mapping servizio facoltativo a componenti. Se non viene passato alcun valore, l'operazione viene applicata a tutti i componenti dei servizi selezionati.
  • enable: True per abilitare remoteJMX, False per disabilitare remoteJMX.
getRemoteJmxInfo() Questa funzione di supporto restituisce:
  • Mappa del servizio → componente → remoteJMX info
  • Questa funzione restituisce questo mapping solo per i servizi disponibili nell'interfaccia utente di Ambari.
Aggiungere i componenti add_component_to_host(request_dict)

Questa funzione accetta un dizionario Python e aggiunge componenti agli host menzionati nel dizionario. I componenti supportati sono Namenode(NN), ResourceM,anager(RM) e Zookeeper_Server.

Esempio:

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

Attenzione: il supporto per NN e RM è riservato solo ai cluster HA e agli host con gruppi di configurazione predefiniti.

Rimuovi componenti remove_component_from_host(request_dict)

Questa funzione accetta un dizionario Python e rimuove i componenti dagli host menzionati nel dizionario con timeout. I componenti supportati sono Datanode e NodeManager.

Esempio:

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

elenco dei nomi di servizio supportati = [HDFS, YARN, MAPREDUCE2, TEZ, HIVE, OOZIE, ZOOKEEPER, AMBARI_METRICS, RANGER, HUE, KAFKA, KERBEROS, ODHUTILS, SPARK3, HBASE, TRINO, REGISTRY, FLINK, JUPYTERHUB]

elenco dei tipi di evento supportati = ["CreateBdsInstance", "AddWorkerNodes", "StartBdsInstance", "ChangeShape"] tipo = ["PASSWORD", "TEXT"]

Esempi di script Python

Per ulteriori informazioni sulle funzioni dell'applicazione di supporto Python, vedere Funzioni dell'applicazione di supporto per gli script Python Bootstrap.

Esempio: script Python bootstrap personalizzato con funzioni di supporto per aggiornare le configurazioni Ambari nel gruppo di configurazione predefinito
#!/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()
Esempio: script Python bootstrap personalizzato con funzioni di supporto per l'esecuzione dei comandi della 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()
Esempio: configurazione di script Python bootstrap personalizzato con tipo di password nella funzione di supporto 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() 
Esempio: script Python di bootstrap personalizzato con funzioni di supporto per aggiungere nuovi componenti agli ultimi host aggiunti
#!/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)
Esempio: script Python di bootstrap personalizzato con funzioni di supporto per aggiungere nuovi componenti alla lista personalizzata di host
#!/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)
Esempio: script Python bootstrap personalizzato con funzioni di supporto per rimuovere i componenti dalla lista personalizzata di host
#!/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)
Esempio: script Python di bootstrap personalizzato con funzione di supporto per eseguire il tipo di metodo, il percorso e il payload basati su 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))