前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据平台:Ambari集群管理

大数据平台:Ambari集群管理

原创
作者头像
Yiwenwu
修改2024-05-17 09:11:52
2670
修改2024-05-17 09:11:52
举报
文章被收录于专栏:大数据&分布式大数据&分布式

背景介绍

Ambari是Hortonworks主导发行的开源管理平台,作为Apache顶级项目,Ambari也是最早且最成熟的大数据集群管理开源组件,可类比于Cloudera研发的CDH Manager。在容器化未盛行的时候,是商用(toB/toC)大数据平台构建的不二选择,用于简化Apache Hadoop集群的配置和管理。除了Hadoop集群,基于可扩展配置文件,用户可扩展自定义组件的部署和运行管理。Ambari 提供了一个易于使用的Web UI和API,使得系统管理员可以对集群进行监控、配置和管理。

大数据集群管理对比:HDP VS CDH
大数据集群管理对比:HDP VS CDH

Ambari 提供的主要功能包括:

  1. 集群安装和配置: 提供向导式的界面来帮助用户在集群中安装Hadoop相关服务,如HDFS、MapReduce、Hive、Pig、HBase等,并且可以配置这些服务的参数,支持大规模集群的界面化部署(3000+)
  2. 集群管理: 提供管理集群的启动、停止和重启操作,允许用户监控各个服务的健康状况和性能指标
  3. 监控和警报: 提供一个综合的监控系统,可以实时监控集群的健康和状态
  4. 安全管理:支持用户帐户和权限管理,允许管理员控制用户对集群资源的访问,可基于ranger权限管理、LDAP认证
  5. 集群扩展: 简化集群节点的上线和下线管理,同时也支持服务的扩展
  6. 可视化界面: 提供Web界面,用户可以轻松地查看集群的状态和性能指标,执行管理任务,以及查看各种服务的日志
  7. 自动化操作: Ambari 支持创建工作流来自动化常见的集群维护任务

Ambari 具备特点:

  1. 简易化:对于集群管理员操作友好,可基于UI界面完成常用的运维管理
  2. 高扩展性和可定制化:能够使hadoop无缝对接到企业平台,可根据Ambari Statck进行自定义服务开发、管理,可基于Ambari View进行定制化的Ambari Web UI

项目结构

Ambari的主要项目结构如下所示:

  • 自动化部署:ambari-server、ambari-agent
  • 自定义服务集成:ambari-server

目录

描述

ambari-server

对外提供Rest API,维护集群的运维管理元数据,与Agent保持心跳,下发执行命令 (Java、Python实现)

ambari-agent

接收Server端命令,并在本机执行,并向Server上报执行结果,定时采集本机组件服务、机器的监控信息 (Python实现)

ambari-shell

提供Shell的进行Ambari的基本运维操作(主要包括:cluster、blueprint、configuration操作,包括 Groovy和Python两种实现)

ambari-common

主要供Server和Agent公用的Python代码库

ambari-metrics

内置监控指标的定义、收集、聚合

ambari-server 子项目主要模块:

  • APIServer:?jetty server,对外提供REST资源操作API
  • HeartbeatServer:jetty server,对内agent提供心跳API
  • MetainfoManager:?读取和缓存服务的元数据
  • ClusterController: 统筹地处理资源操作请求
  • ClusterFSM:集群状态机,在内存中维护各个资源的状态信息
  • ResourceProvider:实现资源的CRUD操作,每种资源对应一个ResourceProvider
  • PropertyProvider:?向资源对象里添加各种property,主要是alert和metric两种
  • StageBuilder:根据服务的元数据(比如由哪些组件构成、依赖哪些其他服务等),构建Stage DAG,并生成每个Stage内的Task
  • ActionQueue:?缓存待执行的Stage

ambari-agent 子项目主要模块:

  • Controller:与Server端交互:通过heartbeat定期发送status report给server;从heartbeat返回中获取Command并分发出去
  • ActionQueue:缓存待执行的Command
  • CustomServiceOrchestrator:?编排Commands的执行,包括获取脚本路径、构建脚本参数
  • PythonExecutor:执行python脚本
  • CommandStatusDict:缓存脚本执行的状态

系统架构

Ambari部署架构图,主要包括三个组件:

  • Ambari Web:提供可视化UI Web操作管理界面
  • Ambari Server:实现大数据组件集群管理的核心,负责整体的集群部署/运维的任务管理,对接Agent下发执行操作
  • Ambari Agent:与Server维持心跳,负责执行Server下发的任务,负责监控对应Node节点的资源信息、进程健康状态
部署架构
部署架构

Amabri实现交互图,主要展示Ambari Server与各组件之间的交互处理:

  • REST API:对外提供REST API,除了给Ambari Web调用提供UI界面外,也便于开发者二次集成开发
  • Request Dispatcher:基于API接收请求操作,对请求操作进行分发管理
  • Orchestrator:根据请求操作基本条件与集群资源,编排对应的集群管理操作,例如,将DataNode与NodeManager部署在相同节点
  • SPI:负责对接各维度的运行监控指标和组件告警
交互图
交互图

Ambari 状态管理维护流程图:基于FSM(有限状态机)维护状态管理,并持久化到DB中

Ambari 任务管理、下发执行流程:

  • Message Queue:消息队列管理,同步已执行的任务结果并返回Agent进程处理
  • Action Queue:待执行任务队列,排队等待Action Executioner执行,执行方式包括:shell、python等

核心概念

资源

资源是Ambari集群管理的最核心概念,Ambari将管理的对象抽象为资源Resource实例,定义集群的资源分为:

  • Cluster:集群,所有安装服务的抽象概念;
  • Service:服务,对应常用的大数据产品,如HDFS、YARN、HIVE、HBase等;
  • Component:组件,服务下的具体构成单元,如HDFS服务下包括:NameNode,DataNode组件;
  • Host:主机,部署安装所使用的机器;
  • HostComponent:主机组件,描述主机和组件的具体安装信息,如:一个NameNode组件需安装2个,选择10.0.0.1和10.0.0.2机器进行安装,则生成两条HostComponent记录:10.0.0.1_namenode,10.0.0.2_namenode
资源关系图
资源关系图

资源之间的关系相互关系:

  1. Cluster集群下,对应一组hosts(部署机器)和Services(部署服务);
  2. 每个Services服务下,对应一组Components组件。例如,HDFS服务对应NameNode,DataNode组件;
  3. 每个Components可部署在多台机器上。例如,DataNode可以部署多个机器节点;

操作

Ambari的操作行为可以拆解为不同粒度的表示,分别如下:

  • Operation:请求操作,如启动HDFS
  • Stage:DAG,定义执行流程
  • Task:各个主机执行的具体任务

对应逻辑关系:一个Operation行为,会划分为多个Stage,同个Stage里面的任务是互相不依赖的,每个Stage根据对应的资源信息生成Task任务,一个Stage可以生成多个Task下发到各个Node主机执行。

如图展示:HDFS、YARN启动Stage划分,划分为4个Stage,同个Stage执行不依赖,Stage之间具有单向依赖。

集群部署

部署步骤

Ambari实现大数据组件安装步骤的流程主要包括如下:

  1. 安装Ambari-Server
  2. 启动Ambari-Server/登录Ambari Web管理界面
  3. “Launch Install Wizard” 点击集群配置向导
  4. 设置集群名称
  5. 选择版本:选择Stack/Version(联网/离线仓库)
  6. 配置主机,免密登录设置
  7. 选择服务
  8. 分配主机/服务部署配置
  9. 自定义配置信息
  10. 执行组件部署、启动、配置下发流程

图示:2.启动Web界面;5.选择版本

图示:6.配置主机;7.选择服务

实现流程

Ambari Request执行流程:核心在于AmbariManagerController 管理控制器

  • 划分DAG Stage:将集群管理流程进行DAS划分
  • 封装Execution对象:封装为可执行对象,并持久化到DB中
Ambari执行流程
Ambari执行流程

元数据文件

基于Ambari做二次开发的一个常用扩展是:扩展Ambari可部署管理的服务组件,主要基于扩展元数据文件实现。

  • AmbariMetaInfo维护所有Stack的服务组件信息,解析服务的继承关系
  • Stack对应YUM repository,在repos/repoinfo.xml中定义
  • Services可以从Stack不同Version版本和common-services继承

metainfo.xml 元数据文件描述Service、及对应Component、Configuration信息。

  1. name:服务的名称(服务ID),名称必须是所属stack中唯一的
  2. displayName:服务展示的名称,在界面中展示的名称
  3. version:服务版本
  4. components:服务包含的组件列表
  5. osSpecifics:服务在指定的OS信息,及对应OS依赖的RPM包
  6. osFamily:软件安装的OS类型
  7. packages:服务依赖的RPM列表
  8. package/name:依赖的RPM名称
  9. commandScript:服务级别定义的执行脚本
  10. comment:对service的备注描述
  11. requiredServices:依赖其他服务的配置
  12. configuration-dir:定义配置文件目录,默认为: configuration
  13. configuration-dependencies:service依赖配置文件

service/components:一个服务可对应多个组件

  1. name:组件的名称
  2. displayName:组件展示名
  3. category:组件类型:MASTER,SLAVE,CLIENT
  4. commandScript定义组件生命周期脚本
    1. script:脚本名称
    2. scriptType:类型
    3. timeout:执行command超时时间, 单位 秒
  5. cardinality:实例的个数:n,n+,ALL
  6. reassignAllowed :组件是否支持迁移到不同host节点
  7. versionAdvertised:组件上报版本信息,用于滚动更新
  8. timelineAppid:上报指标定义的组件名
  9. dependencies:依赖的其他组件名
  10. customCommands:其他自定义命令
类别与默认生命周期
类别与默认生命周期

Scripts:定义组件全生命周期的执行脚本,每个脚本都需要继承Script类,脚本会根据OS变化

  • package/scripts:加载的执行脚本目录
  • package/files:scripts加载的文件,如python/bash/sql等
  • package/templates:scripts执行中需生成的模板文件,如配置

定义示例如下:

代码语言:txt
复制
import?sys
from?resource_management?import?Script
class?Master(Script):
??def?install(self, env):
????print?'Install the Sample Srv Master';
??def?stop(self, env):
????print?'Stop the Sample Srv Master';
??def?start(self, env):
????print?'Start the Sample Srv Master';
??def?status(self, env):
????print?'Status of the Sample Srv Master';
??def?configure(self, env):
????print?'Configure the Sample Srv Master';
if?__name__?==?"__main__":
??Master().execute()

params.py:用于配置文件管理,声明脚本、模板文件参数信息,解析command-{id}.json 文件,常用配置模板项

  • hostLevelParams:系统参数
  • roleParams:组件参数
  • configurations:服务配置信息
  • clusterHostInfo:组件安装机器列表

代码语言:txt
复制
default('/configurations/{name}/{property_key}','{default}’)
config[configurations][{name}][{property_key}]

服务告警

Ambari基于Ambari Agent追踪的告警操作

  • 支持的告警类型:SCRIPT、METRIC、WEB、PORT
  • 返回码:OK、WARNING、 CRITICAL

创建方式

  • 通过alerts.json 模板定义(常用方式)
  • Ambari Rest API创建,基于Server下发给Agent( ALERT_DEFINITION_COMMAND )

调度方式:

  • Agent基于AlertSchedulerHandler进行定时调度
  • Server下发ALERT_EXECUTION_COMMAND命令,立刻执行

告警方式:支持界面&API创建,EMAIL和SNMP方式

告警流程
告警流程

服务指标

Ambari内置AMS(Ambari Metrics System)、采集、汇总Hadoop和机器系统指标。服务通过metrics.json 定义需要被AMS采集的指标信息。指标数据存储支持嵌入式、分布式(HBase)存储。

Rest API

基于Ambari进行二次开发,经常需要对REST API进行改造和扩展,因此下文将针对REST API相关内容进行详述。

调用流程

Ambari的Rest API基于框架Jersey实现,封装了各类型(GET/DELETE/PUT/Create)的调用流程,如下是调用的时序图。从时序图中我们可以得出Ambari对集群的操作主要是基于资源实现的,资源类型和资源操作分别通过Resource.TypeResourceProvider实现。

Rest API的请求最终由具体的ResourceProvider实现

METHOD

方法

描述

GET

ResourceProvider#getResources

根据查询条件获取资源

DELETE

ResourceProvider#deleteResources

根据过滤条件删除资源

PUT

ResourceProvider#updateResources

更新资源的指定属性

POST

ResourceProvider#createResources

根据请求参数创建对应资源

时序图
时序图

常用的Type类型和Provider如下:

Resource.Type

ResourceProvider

描述

Blueprint

BlueprintResourceProvider

部署规划蓝图

Cluster

ClusterResourceProvider

集群

Service

ServiceResourceProvider

服务

Host

HostResourceProvider

主机

Component

ComponentResourceProvider

组件

HostComponent

HostComponentResourceProvider

主机组件

Configuration

ConfigurationResourceProvider

配置

Request

RequestResourceProvider

请求Rest,客户端向服务端发送的请求

Stack

StackResourceProvider

Stack安装版本栈

Alert

AlertResourceProvider

告警

调用方法

调用Ambari API时需要设置对应的用户登录认证信息,如用户名为admin,密码为123456。使用curl命令的示例如下:

代码语言:shell
复制
export AMBARI_USER = admin
export AMBARI_PASSWD = 123456
export AMBARI_HOST = 10.0.0.1
export CLUSTER_NAME = tdw
export SERVICE = HIVE
export COMPONENT = HIVE_SERVER
export COMPONENT_HOST = 10.0.0.2

GET获取集群下HIVE服务信息:

代码语言:shell
复制
curl -u $AMBARI_USER:$AMBARI_PASSWD -H 'X-Requested-By: ambari' -X GET "http://$AMBARI_HOST:8080/api/v1/clusters/$CLUSTER_NAME/services/$SERVICE"

DELETE 删除10.0.0.2机器下的HIVE Server组件:

代码语言:shell
复制
curl -u $AMBARI_USER:$AMBARI_PASSWD -H "X-Requested-By: ambari" -X PUT -d '{"RequestInfo":{"context":"Stop All Components"},"Body":{"ServiceComponentInfo":{"state":"INSTALLED"}}}' "http://$AMBARI_HOST:8080/api/v1/clusters/$CLUSTER_NAME/services/$SERVICE/components/$COMPONENT"

PUT 停止HIVE Server组件

代码语言:shell
复制
curl -u $AMBARI_USER:$AMBARI_PASSWD -H 'X-Requested-By: ambari' -X PUT -d '{"RequestInfo":{"context":"Stop Service"},"Body":{"ServiceInfo":{"state":"INSTALLED"}}}' "http://$AMBARI_HOST:8080/api/v1/clusters/$CLUSTER_NAME/services/$SERVICE/components/$COMPONENT"

资源属性

以下是请求中可以使用的资源属性汇总:

1. 集群Cluster

属性

描述

Clusters/cluster_id

The unique cluster id

Clusters/cluster_name

The cluster name

Clusters/version

The HDP stack version

Clusters/desired_configs

The desired configurations

2. 服务Service

属性

描述

ServiceInfo/service_name

The service name

ServiceInfo/cluster_name

The parent cluster name

ServiceInfo/state

The current state of the service

ServiceInfo/desired_configs

The desired configurations

3. 组件Component

属性

描述

ServiceComponentInfo/service_name

The name of the parent service

ServiceComponentInfo/component_name

The component name

ServiceComponentInfo/cluster_name

The name of the parent cluster

ServiceComponentInfo/description

The component description

ServiceComponentInfo/desired_configs

The desired configurations

4. 主机Host

属性

描述

Hosts/host_name

The host name

Hosts/cluster_name

The name of the parent cluster

Hosts/ip

The host ip address

Hosts/total_mem

The total memory available on the host

Hosts/cpu_count

The cpu count of the host

Hosts/os_arch

The OS architechture of the host (e.g. x86_64)

Hosts/os_type

The OS type of the host (e.g. centos6)

Hosts/rack_info

The rack info of the host

Hosts/last_heartbeat_time

The time of the last heartbeat from the host in milliseconds since Unix epoch

Hosts/last_agent_env

Environment information from the host

Hosts/last_registration_time

The time of the last registration of the host in milliseconds since Unix epoc

Hosts/disk_info

The host disk information

Hosts/host_status

The host status (UNKNOWN, HEALTHY, UNHEALTHY)

Hosts/host_state

The host state

Hosts/desired_configs

The desired configurations

4. 主机组件HostComponent

属性

描述

HostRoles/role_id

The host component id

HostRoles/cluster_name

The name of the parent cluster

HostRoles/host_name

The name of the parent host

HostRoles/component_name

The name of the parent component

HostRoles/state

The state of the host component

HostRoles/actual_configs

The actual configuration

HostRoles/desired_configs

The desired configuration

HostRoles/stack_id

The stack id (e.g. HDP-1.3.0)

接口说明

1. 获取stack的服务栈信息

  • {stack} 部署安装栈,如hdp
  • {version} 安装的版本
代码语言:shell
复制
GET /api/v1/stacks/{stack}/versions/{version}/services?fields=StackServices/*,components/StackServiceComponents/*,configurations/*

2. 获取已安装的服务列表

  • {clusterName} 是对应的操作的集群名称
代码语言:txt
复制
GET /api/v1/clusters/{clusterName}/services?fields=ServiceInfo/service_name&minimal_response=true

3. 启动/停止所有服务

  • Content-Type: text/plain
  • ServiceInfo.state=STARTED(启动)、INSTALLED(停止)
  • 如果针对某几个服务启动,则请求如下/api/v1/clusters/tdw/services?ServiceInfo/service_name.in(FLINK,MAPREDUCE2)
代码语言:txt
复制
PUT /api/v1/clusters/{clusterName}/services

4. 根据机器启动/停止对应的服务

  • Content-Type: text/plain
  • ServiceInfo.state=STARTED(启动)、INSTALLED(停止)
  • hostname是主机名,如:tbds-10-0-0-117
  • response为空,说明无需操作
  • request1:针对单个机器起停示例;request2:针对多个机器起停示例
代码语言:txt
复制
PUT /api/v1/clusters/{clusterName}/hosts/{hostname}/host_components

5. 重启服务操作

  • Content-Type: text/plain
  • RequestInfo.command=RESTART(重启)
代码语言:txt
复制
POST /api/v1/clusters/{clustername}/requests

6. 启动|停止|卸载服务操作

代码语言:txt
复制
PUT /api/v1/clusters/{clustername}/services/{servicename}
  • Content-Type: text/plain
  • RequestInfo.command=STARTED(启动)、INSTALLED(停止)、UNINSTALLED(卸载)
  • servicename是服务名称,如:HDFS

7. 开启|关闭某机器组件的维护模式

代码语言:txt
复制
PUT /api/v1/clusters/{clustername}/services/{servicename}

备注:

  • Content-Type: text/plain
  • HostRoles.maintenance_state=ON(开启)、OFF(关闭)
  • servicename是服务名称,如:HDFS

8. 启动|停止某机器的组件

代码语言:txt
复制
PUT /api/v1/clusters/{clustername}/hosts/{hostname}/host_components/{componentname}
  • Content-Type: text/plain
  • HostRoles.state=STARTED(启动)、INSTALLED(停止)
  • hostname主机名称,如:tbds-10-0-0-78
  • componentname组件名称,如:METADATA_MASTER

9. 重启机器组件操作

代码语言:txt
复制
POST /api/v1/clusters/{clustername}/requests
  • Content-Type: text/plain
  • RequestInfo.command=RESTART(重启)

10. 开启|关闭某机器组件的维护模式

代码语言:txt
复制
PUT /api/v1/clusters/{clustername}/hosts/{hostname}/host_components/{componentname}
  • Content-Type: text/plain
  • HostRoles.maintenance_state=ON(开启)、OFF(关闭)
  • hostname主机名称,如:tbds-10-0-0-78
  • componentname组件名称,如:METADATA_MASTER

11. 修改服务配置信息

代码语言:txt
复制
PUT /api/v1/clusters/{clustername}
  • Content-Type: text/plain
  • POST body:指定服务最新的所有配置信息

12. 新增服务

代码语言:txt
复制
POST /api/v1/clusters/{clustername}/services?ServiceInfo/service_name={servicename}
  • Content-Type: application/x-www-form-urlencoded
  • POST body:services的操作请求

13. 配置服务关联的主机

代码语言:txt
复制
POST /api/v1/clusters/{clustername}/hosts
  • Content-Type: application/x-www-form-urlencoded
  • POST body:services的操作请求

14. 部署服务

代码语言:txt
复制
PUT /api/v1/clusters/{clustername}/services?ServiceInfo/service_name.in({servicename})
  • Content-Type: text/plain
  • POST body:services的操作请求

更多接口可参考:Ambari Rest API官方文档

总结

在大数据平台搭建过程中,如果只针对公司内部场景,所有运维操作可由专门的运维同学管理,且面对的场景比较单一,可以不必考虑基于Ambari集群管理系统搭建环境。但在商业化过程中,需要将大数据平台的搭建过程流程化、可管理化、对用户友好化。因此最早一批的商业化大数据平台很多会选择Ambari进行集群管理,例如,腾讯大数据套件TBDS。目前,由于容器化的普及、存算分离架构演进,Ambari系统由于整体过重以及多集群、容器化等功能支持较弱,可能已不再是最优选择,但其设计思想和实现路径是值得借鉴的

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景介绍
  • 项目结构
  • 系统架构
  • 核心概念
    • 资源
      • 操作
      • 集群部署
        • 部署步骤
          • 实现流程
          • 元数据文件
          • 服务告警
          • 服务指标
          • Rest API
            • 调用流程
              • 调用方法
                • 资源属性
                  • 接口说明
                  • 总结
                  相关产品与服务
                  大数据处理套件 TBDS
                  腾讯大数据处理套件(Tencent Big Data Suite,TBDS)依托腾讯多年海量数据处理经验,基于云原生技术和泛 Hadoop 生态开源技术提供的可靠、安全、易用的大数据处理平台。 TBDS可在公有云、私有云、非云化环境,根据不同数据处理需求组合合适的存算分析组件,包括 Hive、Spark、HBase、Flink、Presto、Iceberg、Elasticsearch、StarRocks 等,以快速构建企业级数据湖仓。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档


                  http://www.vxiaotou.com