Ambari-單步建立cluster



Ambari-單步建立 整體介紹

  • 單步建立集羣即對於集羣內每一個服務的安裝、開啓。組成服務的每一個組件host信息的設置等操做都進行一次ambari-server的restAPI的調用。

    這樣作提升了對集羣操做的靈活性。由於Blueprint的出現是在ambari 1.5版本號以後,對非HDP版本號的支持性可能存在不足,故調ambari-server的restAPI採用的是ambari單步建立集羣的調用方式。node

  • 需要注意的是:在調用restAPI加入服務等操做請先肯定該服務已經在stack中。


Ambari-單步建立 詳細步驟 (以建立HDP版本號爲例)

  • 調用建立集羣的API 

    • request body 包含stack版本號

    • POST http://<ambari-server>:8080/api/v1/clusters/<cluster-name>

    • request body:

      {
        "Clusters": {
          "version" : "BAIDU-1.0
        }
      }
    • 實際命令

      curl -u admin:admin -i -X POST -d '{"Clusters":{"version":"BAIDU-1.0"}}' -H "X-Requested-By:ambari" http://<ambari-server>/api/v1/clusters/<cluster-name>

  • 向已建立的集羣加入host

    • HTTP POST 請求 http://<ambari-server>:8080/api/v1/clusters/<cluster-name>/hosts/<master/slave host>

    • 實際命令

      curl -u admin:admin -i -X POST -H "X-Requested-By:ambari"  http://nj01-hadoop-rd03.nj01.baidu.com:8080/api/v1/clusters/abaciCluster/hosts/nj01-hadoop-rd03.nj01.baidu.com
    • 當中 <ambari-server> = nj01-hadoop-rd03.nj01.baidu.com <cluster-name> = abaciCluster <master/slave host> = nj01-hadoop-rd03.nj01.baidu.com

    • 注意:假設一個集羣有多臺host 那麼調用屢次命令。python

  • 向已建立的集羣加入服務    (以加入HDFS服務爲例)

    • 加入hdfs服務

      • 採用HTTP POST http://<ambari-server>:8080/api/v1/clusters/<cluster-name>/services json

      • request body api

        {
            "ServiceInfo": {
            "service_name": "HDFS"
            }
        }
        curl

      • 實際命令函數

        curl -u admin:admin -i -X POST -d '{"ServiceInfo":{"service_name":"HDFS"}}' -H "X-Requested-By:ambari" http://nj01-hadoop-rd03.nj01.com:8080/api/v1/clusters/abaciCluster/services 
      • 當中 <ambari-server> = nj01-hadoop-rd03.nj01.com <cluster-name> = abaciCluster <service-name> = HDFS

    • 加入服務組件 (包含namenode datanode)
      • 採用HTTP POST http://<ambari-server>:8080/api/v1/clusters/<cluster-name>/services/<service-name>/components/<component-name>
      • 實際命令
        curl -u admin:admin -i -X POST -H "X-Requested-By:ambari" http://nj01-hadoop-rd03.nj01.com:8080/api/v1/clusters/abaciCluster/services/HDFS/components/NAMENODE 
        curl -u admin:admin -i -X POST -H "X-Requested-By:ambari" http://nj01-hadoop-rd03.nj01.com:8080/api/v1/clusters/abaciCluster/services/HDFS/components/DATANODE 
      • 當中 <ambari-server> = nj01-hadoop-rd03.nj01.com <cluster-name> = abaciCluster <service-name> = HDFS <component-name> = NAMENODE/DATANODE
      • 注意:調用restapi的次數有該服務的組件種類決定。

    • 加入用戶對HDFS的配置

      • 採用HTTP POST  http://<ambari-server>:8080/api/v1/clusters/<cluster-name>/configurations
      • request body 以hadoop-user-info.properties.xml爲例
        {
            "type": "hadoop-user-info.properties",
            "tag": "1",
            "properties": {
                "root_ugi": "root,baidu",
                "user_ugi": "public,slave",
                "content": " # Format: username=password,group1,group2,group3 root=baidu,root public=slave,slave "
            }
        }
      • 上面的key-value值會存儲在command-json中
      • 實際命令:
        curl -u admin:admin -i -X POST -d '{"type":"hadoop-user-info.properties","tag":"1","properties":{"root_ugi":"root,baidu","user_ugi":"public,slave","content":" # Format: username=password,group1,group2,group3 root=baidu,root public=slave,slave "}}'  -H "X-Requested-By:ambari" http://<ambari-server>:8080/api/v1/clusters/abaciCluster/configurations
      • 注意:配置項很是多。可能需要調用屢次該restapi。
    • 更新用戶加入的配置 更新後配置信息中的key/value會寫入至command-json中

      • HTTP PUT 請求 http://<ambari-server>:8080/api/v1/clusters/<cluster-name>
      • request body

        {
            "Clusters": {
                "desired_configs": {
                "type": "hadoop-user-info.properties",
                "tag": "1"
               }
            }
        }
        oop

      • 實際命令post

        curl -u admin:admin -i -X PUT -d '{ "Clusters" : {"desired_configs": {"type": "hadoop-user-info.properties", "tag" : "1" }}}' -H "X-Requested-By:ambari" http://<ambari-server>:8080/api/v1/clusters/abaciCluster


    • 對於每個組件配置對應的host (03爲namenode 02 06爲datanode)

      • HTTP POST請求 http://<ambari-server>:8080/api/v1/clusters/<cluster-name>/hosts?Hosts/host_name=<host-name>
      • request body

        {
                "host_components": [
                {
                        "HostRoles": {
                                "component_name": "NAMENODE"
                        }
                }
                ]
        }
        url

      • 實際命令
        curl -u admin:admin -i -X POST -d '{"host_components":[{"HostRoles":{"component_name":"NAMENODE"}}]}' -H "X-Requested-By:ambari" http://<ambari-server>:8080/api/v1/clusters/abaciCluster/hosts?

        Hosts/host_name=nj01-hadoop-rd03.nj01.comspa

        curl -u admin:admin -i -X POST -d '{"host_components":[{"HostRoles":{"component_name":"DATANODE"}}]}' -H "X-Requested-By:ambari" http://<ambari-server>:8080/api/v1/clusters/abaciCluster/hosts?Hosts/host_name=nj01-hadoop-rd02.nj01.com
        curl -u admin:admin -i -X POST -d '{"host_components":[{"HostRoles":{"component_name":"DATANODE"}}]}' -H "X-Requested-By:ambari" http://<ambari-server>:8080/api/v1/clusters/abaciCluster/hosts?Hosts/host_name=nj01-hadoop-rd06.nj01.com


  • 將所有服務部署完畢後,開始進行集羣服務的安裝、開啓、關閉

    • 服務安裝
      • HTTP PUT 請求  http://<ambari-server>:8080/api/v1/clusters/<cluster-name>/services/<service-name>
      • request body

        {
            "ServiceInfo": {
            "state": "INSTALLED"
            }
        }


      • 實際命令:

        curl -u admin:admin -i -X PUT -d      '{"ServiceInfo": {"state" : "INSTALLED"}}'  -H "X-Requested-By:ambari" http://<ambari-server>/api/v1/clusters/abaciCluster/services/ZOOKEEPER


    • 服務開啓
      • HTTP PUT 請求  http://<ambari-server>:8080/api/v1/clusters/<cluster-name>/services/<service-name>
      • request body

        {
            "ServiceInfo": {
            "state": "STARTED"

            }

        }

      • 實際命令:

        curl -u admin:admin -i -X PUT -d      '{"ServiceInfo": {"state" : "STARTED"}}'  -H "X-Requested-By:ambari" http://<ambari-server>:8080/api/v1/clusters/abaciCluster/services/ZOOKEEPER 

    • 服務關閉 
      • 服務關閉的命令同服務安裝全然一致,當該服務在集羣中的狀態爲started時,這時調用ambari-api的安裝命令。ambari系統會將正在執行的服務進程經過python腳本內的stop函數進行關閉。

文章有修改過 詳細關於ambari的問題可以聯繫我 你們一塊兒討論一下

相關文章
相關標籤/搜索