Funciones auxiliares de inicialización de datos basadas en Python

Existen funciones de ayuda de inicialización de datos basadas en script Python para actualizar las configuraciones de Ambari en Big Data Service.

Estas funciones auxiliares le ayudan a:
  • Actualizar la configuración de un componente de Hadoop en el cluster
  • Actualizar la configuración aplicable a un host o grupo de hosts determinado
  • Obtener el valor de configuración y realizar acciones basadas en el valor
  • Exportar configuración de un tipo de configuración (por ejemplo, HDFS core-site.xml)
  • Agregue componentes como Zookeeper, Namenode y Resource Manager a los nodos maestros de un cluster de HA.
  • Elimine componentes como DataNode y NodeManager.
Nota

  1. Puede ejecutar estas funciones auxiliares solo desde un método predefinido en el script de Python.
  2. Python 2.7 es la versión de python soportada en el script de Python.
  3. Debe gestionar el script de Python bajo su propio riesgo porque puede provocar el cierre del microservicio.

Para ejecutar una secuencia de comandos de inicialización de datos, consulte Running the Bootstrap Script.

Para obtener más información sobre las funciones auxiliares del script de inicialización de datos de Python, consulte:

Funciones del asistente de script de Python de inicialización de datos

Para obtener más información sobre el script de inicialización de datos de Python, consulte Funciones de ayuda de inicialización de datos basadas en Python.

Para ver ejemplos de funciones de ayuda de inicialización de datos basadas en Python, consulte Ejemplos de scripts de Python.

Para ejecutar una secuencia de comandos de inicialización de datos, consulte Running the Bootstrap Script.

categoría Función Helper Funcionalidad
Grupos de configuración createConfigGroup(service_name, hosts, config_group="Default") Esta función auxiliar crea un grupo de configuración para un servicio con una lista de hosts. Debe proporcionar el nombre service_name, la lista de hosts y config_group como entrada.
removeConfigGroup(service_name, config_group="Default") Esta función auxiliar elimina el grupo de configuración en un servicio. Debe proporcionar el nombre service_name y config_group como entrada.
addHostsInConfigGroup(service_name, hosts, config_group="Default" Esta función auxiliar agrega hosts al grupo de configuración de un servicio con una lista de hosts. Debe proporcionar service_name, una lista de hosts y un nombre de config_group como entrada.
removeHostsInConfigGroup(service_name, hosts, config_group="Default" Esta función auxiliar elimina los hosts del grupo de configuración en un servicio con una lista de hosts. Debe proporcionar service_name, una lista de hosts y un nombre de config_group como entrada.
listConfigGroups(service_name) Esta función auxiliar muestra todos los grupos de configuración de un servicio. Debe proporcionar service_name.
getHostsInConfigGroup(service_name, config_group="Default" Esta función auxiliar muestra todos los hosts de config_group en un servicio. Vd. debe proporcionar config_group y service_name.
importConfigGroup(service_name, from_config_group, to_config_group) Esta función auxiliar clona las configuraciones de un grupo de configuración a otro grupo de configuración en un servicio. Vd. debe proporcionar from_config_group, to_config_group y service_name.
Configuración updateConfig(service_name, config_type, config_properties, config_group="Default", config_meta={})

Esta función auxiliar actualiza las propiedades de configuración al archivo config_type de config_group en un servicio. Vd. debe proporcionar el nombre del Servicio, config_type, config_properties, config_group y config_meta.

Nota: config_properties es una asignación de pares de clave y valor de configuración.

config_meta es una asignación de la clave de configuración y los metadatos de configuración. Los valores de tipo posibles en el meta de configuración son PASSWORD y TEXT con el valor por defecto TEXT.

Por ejemplo: 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") Esta función auxiliar elimina la configuración del archivo config_type de config_group en un servicio. Vd. debe proporcionar config_group, config_type, config_name y service_name.

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

getConfig(service_name, config_type, config_name, config_group="Default") Esta función auxiliar muestra el valor de la propiedad de configuración config_name en el archivo config_type de un config_group en un servicio. Vd. debe proporcionar config_group, config_type, config_name y service_name.
restartStaleConfig() Esta función auxiliar reinicia los servicios en los que las configuraciones están anticuadas.
exportConfig(service_name, config_type, config_group="Default") Esta función auxiliar muestra todas las configuraciones en el archivo config_type de config_group en un servicio. Vd. debe proporcionar config_group, config_type y service_name.
Ejecución de shell runShellCommandOnAllNodes(command) Esta función auxiliar ejecuta el comando de shell en todos los nodos del cluster. Debe proporcionar command.
runShellCommandOnNode(command, host) Esta función auxiliar ejecuta el comando shell en el host solicitado. Vd. debe proporcionar command y host.
Servicios públicos getClusterName() Muestra el nombre del cluster.
getMasterNodesIps() Muestra los nodos maestros lps.
getWorkerNodesIps() Muestra los nodos de trabajador lps.
getUtilityNodesIps() Muestra lps de nodo de utilidad.
getQueryServerNodesIps() Muestra los nodos del servidor de consultas lps.
getComputeOnlyWorkerNodesIps() Muestra lps de nodo de trabajador solo de cálculo.
getEdgeNodesIps() Muestra lps de nodo de borde.
getAllNodesIps() Muestra todos los lps de los nodos.
getEventType() Muestra el tipo de evento. Los posibles valores de tipo de evento son CreateBdsInstance, AddWorkerNodes, StartBdsInstance, ChangeShape, on-demand.
getLogger()

Esta función auxiliar devuelve la instancia del registrador que puede utilizar para registrar la información y los logs de errores. Por ejemplo, getLogger().info("log info msg")

get_last_added_host_names()

Devuelve la lista de Python de nombres de host agregados en la última operación "Add Node".

Devuelve None (Ninguno), si no se agrega ningún host nuevo al cluster.

get_last_added_host_ips()

Devuelve la lista de Python de IP privadas agregadas en las últimas operaciones "Add Node".

Devuelve None (Ninguno), si no se agrega ningún host nuevo al cluster.

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

Esta función auxiliar ejecuta el tipo de método, la ruta y la carga útil basados en la API de REST de Ambari. Vd. deberá proporcionar method, path, payload(Si corresponde), params(Si corresponde) y headers.

Parámetros:

  • method: valores posibles: GET, POST, PUT y DELETE.
  • ruta: ruta relativa
  • carga útil: carga útil de solicitud si la hay
  • parámetros: Solicitar parámetros Si los hay
  • cabeceras: cabeceras de solicitud Si las hay
JMX remoto updateRemoteJmx(service_names=None, component_names_mapping=None, enable=True) Esta función auxiliar activa o desactiva la métrica remoteJMX.
  • service_names: lista opcional de servicios que se activarán con remoteJMX, service_names mencionado en <remote-jmx-section>. Si no se transfiere ningún valor, la operación se aplica a todos los servicios
  • service_to_components: asignación de servicio opcional a componentes. Si no se transfiere ningún valor, la operación se aplica a todos los componentes de los servicios seleccionados.
  • enable: True para activar remoteJMX, False para desactivar remoteJMX.
getRemoteJmxInfo() Esta función auxiliar devuelve:
  • Mapa de servicio → componente → remoteJMX info
  • Esta función solo devuelve esta asignación para los servicios disponibles en la interfaz de usuario de Ambari.
Agregar Componentes add_component_to_host(request_dict)

Esta función toma un diccionario de Python y agrega componentes a los hosts mencionados en el diccionario. Los componentes soportados son Namenode(NN), ResourceM,anager(RM) y Zookeeper_Server.

Ejemplo:

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

Precaución: la compatibilidad con NN y RM solo es para clusters de alta disponibilidad y para los hosts que tienen grupos de configuración predeterminados.

Eliminar componentes remove_component_from_host(request_dict)

Esta función toma un diccionario de Python y elimina los componentes de los hosts mencionados en el diccionario con timeouts. Los componentes soportados son Datanode y NodeManager.

Ejemplo:

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

lista de nombres de servicio admitidos = [HDFS, YARN, MAPREDUCE2, TEZ, HIVE, OOZIE, ZOOKEEPER, AMBARI_METRICS, RANGER, HUE, KAFKA, KERBEROS, ODHUTILS, SPARK3, HBASE, TRINO, REGISTRY, FLINK, JUPYTERHUB]

lista de tipos de eventos admitidos = ["CreateBdsInstance", "AddWorkerNodes", "StartBdsInstance", "ChangeShape"] tipo = ["PASSWORD", "TEXT"]

Ejemplos de scripts de Python

Para obtener más información sobre las funciones auxiliares de Python, consulte Funciones auxiliares de script de Python de inicialización de datos.

Ejemplo: script de Python de inicialización de datos personalizado con funciones auxiliares para actualizar las configuraciones de Ambari en el grupo de configuración por defecto
#!/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()
Ejemplo: script de Python de inicialización de datos personalizado con funciones auxiliares para la ejecución de comandos de 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()
Ejemplo: configuración de script de Python de inicialización de datos personalizada con tipo de contraseña en la función auxiliar 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() 
Ejemplo: script de Python de inicialización de datos personalizado con funciones auxiliares para agregar nuevos componentes a los últimos hosts agregados
#!/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)
Ejemplo: script de Python de inicialización de datos personalizado con funciones auxiliares para agregar nuevos componentes a una lista personalizada de 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
                
                request_dict = {
                "NAMENODE": {
                "hosts": ["hostname1", "hostname2"]
                },
                "RESOURCEMANAGER": {
                "hosts": ["hostname2", "hostname3"]
                }
                }
                
                helper.add_component_to_host(request_dict)
Ejemplo: script de Python de inicialización de datos personalizado con funciones auxiliares para eliminar componentes de la lista personalizada de 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
                
                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)
Ejemplo: script de Python de inicialización de datos personalizado con función de ayuda para ejecutar el tipo de método, la ruta y la carga útil basados en la API de REST de 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))