Pythonベースのブートストラップ・ヘルパー関数

Pythonスクリプト・ベースのブートストラップ・ヘルパー関数は、ビッグ・データ・サービスのAmbari構成を更新するために存在します。

これらのヘルパー関数は、次のことに役立ちます。
  • クラスタ内のHadoopコンポーネントの構成の更新
  • 特定のホストまたはホストグループに適用可能な構成を更新します
  • 構成値を取得し、値に基づいてアクションを実行します
  • 構成タイプ(HDFS core-site.xmlなど)から構成をエクスポートします。
  • HAクラスタのマスター・ノードに、Zookeeper、Namenode、Resource Managerなどのコンポーネントを追加します。
  • DataNodeやNodeManagerなどのコンポーネントを削除します。
ノート

  1. これらのヘルパー関数は、Pythonスクリプトの事前定義済メソッドからのみ実行できます。
  2. Python 2.7は、Pythonスクリプトでサポートされているpythonバージョンです。
  3. マイクロサービスの停止につながる可能性があるため、Pythonスクリプトは自分で管理する必要があります。

ブートストラップ・スクリプトを実行するには、「ブートストラップ・スクリプトの実行」を参照してください。

Pythonブートストラップ・スクリプト・ヘルパー関数の詳細は、次を参照してください:

ブートストラップPythonスクリプトのヘルパー関数

Pythonブートストラップ・スクリプトの詳細は、Pythonベースのブートストラップ・ヘルパー関数を参照してください。

Pythonベースのブートストラップ・ヘルパー関数の例は、Pythonスクリプトの例を参照してください。

ブートストラップ・スクリプトを実行するには、「ブートストラップ・スクリプトの実行」を参照してください。

カテゴリ Helper関数 機能
構成グループ createConfigGroup(service_name, hosts, config_group="Default") このヘルパー関数は、ホストのリストを含むサービスの構成グループを作成します。入力として、service_namehostsおよびconfig_group名のリストを指定する必要があります。
removeConfigGroup(service_name, config_group="Default") このヘルパー関数は、サービスの構成グループを削除します。入力としてservice_nameおよびconfig_group名を指定する必要があります。
addHostsInConfigGroup(service_name, hosts, config_group="Default" このヘルパー関数は、ホストのリストを含むサービスの構成グループにホストを追加します。入力として、service_namehostsのリストおよびconfig_group名を指定する必要があります。
removeHostsInConfigGroup(service_name, hosts, config_group="Default" このヘルパー関数は、ホストのリストを含むサービスの構成グループに対するホストを削除します。入力として、service_namehostsのリストおよびconfig_group名を指定する必要があります。
listConfigGroups(service_name) このヘルパー関数は、サービス内のすべての構成グループを表示します。service_nameを指定する必要があります。
getHostsInConfigGroup(service_name, config_group="Default" このヘルパー関数は、サービスのconfig_group内のすべてのホストを表示します。config_groupおよびservice_nameを指定する必要があります。
importConfigGroup(service_name, from_config_group, to_config_group) このヘルパー関数は、ある構成グループから構成をサービス内の別の構成グループにクローニングします。from_config_groupto_config_groupおよびservice_nameを指定する必要があります。
Config updateConfig(service_name, config_type, config_properties, config_group="Default", config_meta={})

このヘルパー関数は、サービス内のconfig_groupconfig_typeファイルに構成プロパティを更新します。サービス名、config_typeconfig_propertiesconfig_groupおよびconfig_metaを指定する必要があります。

ノート: config_propertiesは、構成キーと値のペアのマップです。

config_metaは、構成キーおよび構成メタデータのマップです。構成メタで使用可能なタイプ値は、PASSWORDおよびTEXTで、デフォルト値はTEXTです。

たとえば: 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") このヘルパー関数は、サービス内のconfig_groupconfig_typeファイルから構成を削除します。config_groupconfig_typeconfig_nameおよびservice_nameを指定する必要があります。

たとえば: helper.removeConfig(service_name="HDFS", config_type="core-site", config_name="fs.trash.interval")

getConfig(service_name, config_type, config_name, config_group="Default") このヘルパー関数は、サービス内のconfig_groupconfig_typeファイル内のconfig_nameの構成プロパティ値を表示します。config_groupconfig_typeconfig_nameおよびservice_nameを指定する必要があります。
restartStaleConfig() このヘルパー関数は、構成が失効しているサービスを再起動します。
exportConfig(service_name, config_type, config_group="Default") このヘルパー関数は、サービス内のconfig_groupconfig_typeファイル内のすべての構成を表示します。config_groupconfig_typeおよびservice_nameを指定する必要があります。
シェル実行 runShellCommandOnAllNodes(command) このヘルパー関数は、すべてのクラスタ・ノードでシェル・コマンドを実行します。commandを指定する必要があります。
runShellCommandOnNode(command, host) このヘルパー関数は、要求されたホスト上でシェルコマンドを実行します。commandおよびhostを指定する必要があります。
ユーティリティ getClusterName() クラスタ名を表示します。
getMasterNodesIps() マスターノードlpsを表示します。
getWorkerNodesIps() ワーカー・ノードlpsを表示します。
getUtilityNodesIps() ユーティリティーノードlpsを表示します。
getQueryServerNodesIps() クエリーサーバーノードlpsを表示します。
getComputeOnlyWorkerNodesIps() コンピュート専用ワーカー・ノードlpsを表示します。
getEdgeNodesIps() エッジ ノードlpsを表示します。
getAllNodesIps() すべてのノードlpsを表示します。
getEventType() イベント・タイプが表示されます。使用可能なイベント・タイプ値は、CreateBdsInstanceAddWorkerNodesStartBdsInstanceChangeShapeon-demandです。
getLogger()

このヘルパー関数は、情報ログおよびエラー・ログを記録するために使用できるロガー・インスタンスを返します。たとえば、getLogger().info("log info msg")です。

get_last_added_host_names()

最後の「ノードの追加」操作で追加されたホスト名のPythonリストを返します。

新しいホストがクラスタに追加されていない場合は、「なし」を返します。

get_last_added_host_ips()

最後の「ノードの追加」操作で追加されたプライベートIPのPythonリストを返します。

新しいホストがクラスタに追加されていない場合は、「なし」を返します。

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

このヘルパー関数は、Ambari REST APIベースのメソッド・タイプ、パスおよびペイロードを実行します。methodpathpayload(存在する場合)、params(存在する場合)およびheadersを指定する必要があります。

パラメータ:

  • メソッド: 可能な値: GETPOSTPUTおよびDELETE
  • path: 相対パス
  • payload: 要求ペイロード(ある場合)
  • params: リクエスト・パラメータ(ある場合)
  • header: リクエスト・ヘッダー(ある場合)
リモートJMX updateRemoteJmx(service_names=None, component_names_mapping=None, enable=True) このヘルパー・ファンクションは、remoteJMXメトリックを有効または無効にします。
  • service_names: remoteJMXで有効にするサービスのオプションのリスト。service_namesは、<remote-jmx-section>に記載されています。値が渡されない場合、操作はすべてのサービスに適用されます
  • service_to_components: オプションのサービスからコンポーネントへのマッピング。値が渡されない場合、操作は選択したサービスのすべてのコンポーネントに適用されます。
  • enable: remoteJMXを有効にする場合はTrue、remoteJMXを無効にする場合はFalse。
getRemoteJmxInfo() このヘルパー・ファンクションの戻り値:
  • サービスのマップ → コンポーネント → remoteJMX情報
  • この関数は、Ambari UIで使用可能なサービスについてのみこのマッピングを返します。
コンポーネントの追加 add_component_to_host(request_dict)

この関数は、Pythonディクショナリを取得し、ディクショナリに記載されているホストにコンポーネントを追加します。サポートされているコンポーネントは、Namenode(NN)ResourceM,anager(RM)およびZookeeper_Serverです。

例:

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

注意: NNおよびRMのサポートは、HAクラスタおよびデフォルト構成グループを持つホストに対してのみ行われます。

コンポーネントを削除 remove_component_from_host(request_dict)

この関数はPythonディクショナリを取得し、タイムアウトでディクショナリに示されたホストからコンポーネントを削除します。サポートされているコンポーネントは、DatanodeおよびNodeManagerです。

例:

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

サポートされているサービス名のリスト= [HDFS、 YARN、 MAPREDUCE2、 TEZ、 HIVE、 OOZIE、 ZOOKEEPER、 AMBARI_METRICS、 RANGER、 HUE、 KAFKA、 KERBEROS、 ODHUTILS、 SPARK3、 HBASE、 TRINO、 REGISTRY、 FLINK、 JUPYTERHUB]

サポートされているイベント・タイプのリスト= ["CreateBdsInstance"、 "AddWorkerNodes"、 "StartBdsInstance"、 "ChangeShape"] type = ["PASSWORD"、 "TEXT"]

Pythonスクリプトの例

Pythonヘルパー関数の詳細は、Bootstrap Pythonスクリプト・ヘルパー関数を参照してください。

例: デフォルト構成グループのAmbari構成を更新するためのヘルパー関数を含むカスタム・ブートストラップPythonスクリプト
#!/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()
例: シェル・コマンド実行用のヘルパー関数を使用したカスタム・ブートストラップPythonスクリプト
#!/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()
例: updateConfigヘルパー関数でパスワード・タイプを使用したカスタム・ブートストラップPythonスクリプト構成
#!/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() 
例: 最後に追加したホストに新しいコンポーネントを追加するヘルパー関数を含むカスタムブートストラップPythonスクリプト
#!/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)
例: ホストのカスタム・リストに新しいコンポーネントを追加するヘルパー関数を含むカスタム・ブートストラップPythonスクリプト
#!/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)
例: ホストのカスタム・リストからコンポーネントを削除するヘルパー関数を含むカスタム・ブートストラップPythonスクリプト
#!/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)
例: Ambari REST APIベースのメソッド・タイプ、パスおよびペイロードを実行するヘルパー関数を含むカスタム・ブートストラップPythonスクリプト
#!/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))