TT Bigdata TT Bigdata
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件安装

    • 常规&高可用
  • 版本专题

    • 更新说明
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 模板代码

    • 各类组件
    • 通用模板
  • 国产化&其他系统

    • Centos系列
    • Kylin系列
    • OpenEuler系列
    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 定制开发

    • 组件版本定制
    • 样式风格定制
  • 蓝图愿景
  • 技术支持
  • 合作共建
GitHub (opens new window)

JaneTTR

数据酿造智慧,每一滴都是沉淀!
首页
  • 部署专题

    • 常规安装
    • 一键部署
  • 组件安装

    • 常规&高可用
  • 版本专题

    • 更新说明
  • Ambari-Env

    • 环境准备
    • 开始使用
  • 组件编译

    • 专区—Ambari
    • 专区—Bigtop
  • 报错解决

    • 专区—Ambari
    • 专区—Bigtop
  • 其他技巧

    • Maven镜像加速
    • Gradle镜像加速
    • Bower镜像加速
    • 虚拟环境思路
    • R环境安装+一键安装脚本
    • Ivy配置私有镜像仓库
    • Node.js 多版本共存方案
    • Ambari Web本地启动
    • Npm镜像加速
    • PostgreSQL快速安装
    • Temurin JDK 23快速安装
  • 成神之路

    • 专区—Ambari
    • 专区—Bigtop
  • 集成案例

    • Redis集成教学
    • Dolphin集成教学
    • Doris集成教学
    • 持续整理...
  • 模板代码

    • 各类组件
    • 通用模板
  • 国产化&其他系统

    • Centos系列
    • Kylin系列
    • OpenEuler系列
    • Rocky系列
    • Ubuntu系列
  • 生产调优

    • 组件调优指南
    • 1v1指导调优
  • 定制开发

    • 组件版本定制
    • 样式风格定制
  • 蓝图愿景
  • 技术支持
  • 合作共建
GitHub (opens new window)
  • 方法论

  • 代码生命周期-metainfo

    • 加载原理深度剖析[一]
    • 加载原理深度剖析[二]
    • 加载原理深度剖析[三]
    • 结构与层级深入解读
    • configFile详解[一]
    • configFile详解[二]
    • cardinality详解[一]
    • cardinality详解[二]
    • cardinality详解[三]
    • category详解[一]
    • category详解[二]
      • 2.2 从请求到验证的流程详解
        • 2.2.1 服务选择与添加流程
        • 2.2.2 前端请求发起与参数上送
        • 2.2.3 推荐结果返回与数据解析
        • 关键字段说明与逻辑解读
    • category详解[三]
    • theme详解[一]
    • theme详解[二]
    • theme详解[三]
    • commandScript详解[二]
    • commandScript详解[一]
    • commandScript详解[三]
    • customCommand详解[一]
    • customCommand详解[二]
    • customCommand详解[三]
    • requiredServices详解[一]
    • requiredServices详解[二]
    • osSpecifics详解[一]
    • osSpecifics详解[二]
    • osSpecifics详解[三]
    • quicklinks详解[一]
    • quicklinks详解[二]
    • quicklinks详解[三]
    • quicklinks详解[四]
  • 架构剖析

  • UI样式

  • GOD-Ambari
  • 代码生命周期-metainfo
JaneTTR
2025-06-01
目录

category详解[二]

# 2.2 从请求到验证的流程详解 全链路解析

在 Ambari 添加服务的过程中,平台会结合当前集群节点分布与服务依赖关系,动态生成推荐部署方案。整个推荐流程前后端协同联动,每一个环节都直观透明。下面以 Zookeeper 服务为例,逐步拆解从 UI 操作到最终推荐结果返回的每个关键步骤。

# 2.2.1 服务选择与添加流程

在服务选择界面,如果当前环境已部署 Redis,本次就可以直接勾选 Zookeeper 并点击“下一步”。Ambari 会据此生成 Zookeeper 的推荐安装方案。

Zookeeper 服务选择

# 2.2.2 前端请求发起与参数上送

当用户点击“下一步”时,浏览器会发起一个 HTTP 请求,将本轮所有节点及服务选择情况上报给 Ambari 后端,目的是请求生成合理的部署建议。

image-20241002105550158

实际请求内容如下所示(以 curl 形式展示,数据已简化):

curl 'http://localhost:28080/api/v1/stacks/BIGTOP/versions/3.2.0/recommendations' \
  -H 'Accept: application/json, text/javascript, */*; q=0.01' \
  -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: text/plain' \
  -H 'Cookie: _ga=GA1.1.1591965935.1720631763; apt.uid=AP-YFGMCGUNNIFB-2-1726927068139-89959811.0.2.a2e3917a-4f22-4c24-8671-436b74b600a2; _ga_0C4M1PWYZ7=GS1.1.1726929800.18.0.1726929803.0.0.0; _ga_T11SF3WXX2=GS1.1.1726929800.16.0.1726929803.57.0.0; _ga_K2SPJK2C73=GS1.1.1726929800.16.0.1726929803.57.0.0; AMBARISESSIONID=node01ef02iyrwkd3sdmg9aaxv48xe1.node0' \
  -H 'Origin: http://localhost:28080' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:28080/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: same-origin' \
  -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0' \
  -H 'X-Requested-By: X-Requested-By' \
  -H 'X-Requested-With: XMLHttpRequest' \
  -H 'sec-ch-ua: "Microsoft Edge";v="129", "Not=A?Brand";v="8", "Chromium";v="129"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "Windows"' \
  --data-raw '{"hosts":["centos1","centos2","centos3"],"services":["ZOOKEEPER","REDIS"],"recommend":"host_groups","recommendations":{"blueprint":{"host_groups":[{"name":"host-group-1","components":[{"name":"REDIS_CLIENT"},{"name":"REDIS_MASTER"},{"name":"REDIS_SLAVE"}]},{"name":"host-group-2","components":[{"name":"REDIS_CLIENT"},{"name":"REDIS_MASTER"},{"name":"REDIS_SLAVE"}]},{"name":"host-group-3","components":[{"name":"REDIS_CLIENT"},{"name":"REDIS_MASTER"},{"name":"REDIS_SLAVE"}]}]},"blueprint_cluster_binding":{"host_groups":[{"name":"host-group-1","hosts":[{"fqdn":"centos1"}]},{"name":"host-group-2","hosts":[{"fqdn":"centos2"}]},{"name":"host-group-3","hosts":[{"fqdn":"centos3"}]}]}}}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

image-20241002105234636

请求体中的关键参数有:

{
  // 核心参数-------核心中的核心 请往这里看👀 
  "hosts": [
    "centos1",
    "centos2",
    "centos3"
  ],
  // 核心参数-------核心中的核心 请往这里看👀 

  // 核心参数-------核心中的核心 请往这里看👀 
  "services": [
    "ZOOKEEPER",
    "REDIS"
  ],
  // 核心参数-------核心中的核心 请往这里看👀 

  // 核心参数-------核心中的核心 请往这里看👀 
  "recommend": "host_groups",
  // 核心参数-------核心中的核心 请往这里看👀 

  // 核心参数-------核心中的核心 请往这里看👀 
  "recommendations": {
    "blueprint": {
      "host_groups": [
        {
          "name": "host-group-1",
          "components": [
            {
              "name": "REDIS_CLIENT"
            },
            {
              "name": "REDIS_MASTER"
            },
            {
              "name": "REDIS_SLAVE"
            }
          ]
        },
        {
          "name": "host-group-2",
          "components": [
            {
              "name": "REDIS_CLIENT"
            },
            {
              "name": "REDIS_MASTER"
            },
            {
              "name": "REDIS_SLAVE"
            }
          ]
        },
        {
          "name": "host-group-3",
          "components": [
            {
              "name": "REDIS_CLIENT"
            },
            {
              "name": "REDIS_MASTER"
            },
            {
              "name": "REDIS_SLAVE"
            }
          ]
        }
      ]
    },
    "blueprint_cluster_binding": {
      "host_groups": [
        {
          "name": "host-group-1",
          "hosts": [
            {
              "fqdn": "centos1"
            }
          ]
        },
        {
          "name": "host-group-2",
          "hosts": [
            {
              "fqdn": "centos2"
            }
          ]
        },
        {
          "name": "host-group-3",
          "hosts": [
            {
              "fqdn": "centos3"
            }
          ]
        }
      ]
    }
  }
  // 核心参数-------核心中的核心 请往这里看👀 
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
  • hosts:所有可用主机列表
  • services:本轮选择需要部署的服务(如 ZOOKEEPER、REDIS)
  • recommend:请求推荐类型(此处为主机组 host_groups)
  • recommendations:当前各主机组与服务组件的对应关系(blueprint+binding)

# 2.2.3 推荐结果返回与数据解析

后端收到请求后,会调用 Ambari 的 StackAdvisor 推荐引擎。该模块会综合考虑当前集群拓扑、资源状态与服务依赖,生成一份推荐的主机分组与服务组件分布方案,最终以 JSON 格式返回前端。

image-20241002113804391

返回示例(部分内容简化):

{
  "resources": [
    {
      // 核心参数-------核心中的核心 请往这里看👀 
      "href": "http://localhost:28080/api/v1/stacks/BIGTOP/versions/3.2.0/recommendations/66",
      // 核心参数-------核心中的核心 请往这里看👀 
      "hosts": [
        "centos2",
        "centos3",
        "centos1"
      ],
      "services": [
        "REDIS",
        "ZOOKEEPER"
      ],
      // 核心参数-------核心中的核心 请往这里看👀   
      "Recommendation": {
        "id": 66
      },
      // 核心参数-------核心中的核心 请往这里看👀   
      "Versions": {
        "stack_name": "BIGTOP",
        "stack_version": "3.2.0"
      },
      "recommendations": {
        "config-groups": null,
        "blueprint": {
          "configurations": null,
          "host_groups": [
            {
              "components": [
                {
                  "name": "ZOOKEEPER_CLIENT"
                },
                {
                  "name": "REDIS_MASTER"
                },
                {
                  "name": "ZOOKEEPER_SERVER"
                },
                {
                  "name": "REDIS_SLAVE"
                },
                {
                  "name": "REDIS_CLIENT"
                }
              ],
              "name": "host-group-1"
            },
            {
              "components": [
                {
                  "name": "REDIS_MASTER"
                },
                {
                  "name": "ZOOKEEPER_SERVER"
                },
                {
                  "name": "REDIS_SLAVE"
                },
                {
                  "name": "REDIS_CLIENT"
                }
              ],
              "name": "host-group-3"
            },
            {
              "components": [
                {
                  "name": "REDIS_MASTER"
                },
                {
                  "name": "ZOOKEEPER_SERVER"
                },
                {
                  "name": "REDIS_SLAVE"
                },
                {
                  "name": "REDIS_CLIENT"
                }
              ],
              "name": "host-group-2"
            }
          ]
        },
        "blueprint_cluster_binding": {
          "host_groups": [
            {
              "hosts": [
                {
                  "fqdn": "centos3"
                }
              ],
              "name": "host-group-1"
            },
            {
              "hosts": [
                {
                  "fqdn": "centos2"
                }
              ],
              "name": "host-group-2"
            },
            {
              "hosts": [
                {
                  "fqdn": "centos1"
                }
              ],
              "name": "host-group-3"
            }
          ]
        }
      }
    }
  ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117

image-20241002113305588

# 关键字段说明与逻辑解读

字段 说明
hosts 当前可用主机列表,后续所有部署方案都将在这些主机范围内落地。
services 本次涉及的全部服务类型(如 ZOOKEEPER、REDIS)。
recommendations 推荐的主机组与组件分配方案,blueprint 明确每组需要哪些组件,binding 则把主机组映射到具体服务器。
blueprint 以主机组为单位,明确每组上部署的服务组件。例如 host-group-1 上包含 ZOOKEEPER_SERVER、REDIS_CLIENT 等。
blueprint_cluster_binding 主机组与实际主机绑定。host-group-1 就会被分配到 centos3 上,即 Zookeeper Server 和 Redis Client 会推荐部署在 centos3。
href 唯一推荐方案编号。每生成一次推荐,该编号递增。这个编号会落盘为对应的日志、参数 json 文件,方便后续分析调试。

此流程的设计使 Ambari 能根据最新的集群和服务状态自动推荐合理的 Server 排布。初始时节点上并未分配 Zookeeper Server,完成请求后,每台服务器应部署哪些服务组件,将一目了然。

image-20241002114450183

笔记

本节完整展示了 Ambari 推荐引擎从 UI 操作到 API 调用、再到推荐结果返回的全链路细节,无论是流程梳理还是关键参数解释,都极具参考价值。后续还可针对 StackAdvisor 生成方案的内部逻辑进行深度追踪分析。

#Ambari#metainfo#推荐部署#StackAdvisor#自动化运维#组件编排
category详解[一]
category详解[三]

← category详解[一] category详解[三]→

最近更新
01
Pandoc 缺失导致 SparkR 构建失败
06-08
02
Cyrus SASL/GSASL 缺失解决
06-07
03
Hadoop_3.3.4 编译实战 1.0.0+
06-06
更多文章>
Theme by Vdoing | Copyright © 2017-2025 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式