Ambari目标
解决Hadoop生态系统部署

部署:hadoop组件间有依赖,包括配置、版本、启动顺序、权限配置等。

部署过程跟踪。能够展示出部署过程中每个步骤的状态及相关信息。
多机部署问题,当集群规模增加后,机器出问题机率增加,在部署或更新中可能会出现机器故障

组件本身设计:hadoop及其组件需要容忍机器的故障,同时需要防止不兼容 版本组件给系统带来的影响

部署服务:需要能够容忍某些组件启动、更新失败

配置管理

可以将默认配置写入stack中(stack后续介绍),在开启时ambari将stack中各个版本的config文件读入,在使用blueprint创建集群部署hadoop时,直接生成command-json文件。(blueprint后续介绍)
服务状态展示、监控、报警

Ambari主要概念

资源

ambari将集群及集群中的服务、组件、机器都视为资源,资源的状态都会记录在db中

Hadoop生态

Stack

发行版本的含义,如HDP,可以有若干版本。
Service

服务,属于stack,一个stack下可以有多个service,service也可以分多个版本,版本间可以有继承关系。例如zookeeper就是一项服务。
Component

组件,属于service,一个service下可以有多个component组成。例如HDFS服务下的组件有datanode,namenode等。
角色

Component可以指定部署时的角色,如master、slave等,也可以指定每种角色需要的host个数。例如namenode为单一host组件,可以部署在master机器上,datanode可以部署在多台host上那么可以指定部署datanode的角色为slave
host

host为运行ambari-agent的一台机器,同时也是搭建集群内部的一台机器,可以为host设置对应的角色,例如master,slave等。
Ambari整体流程

restAPI->ambari-server

单步创建

通过调用ambari提供的restAPI进行集群的单步创建

Add cluster:新建集群

Update cluster:更新集群配置

Add service for cluster:向集群添加服务

Add component for service:为每个服务添加对应组件

Add host for cluster:添加host资源

Add component on host:设置每个host上运行的组件

Install/Start/Stop service:安装/开启/关闭 集群的对应服务
Blueprint

调用一次restAPI即可进行集群创建、服务安装、组件部署、服务开始等集群操作,简化了单步创建的调用次数。
ambari-server->ambari-agent

ambari-server端负责接收rest请求,再向agent端发送命令,发送命令的格式是json,内部包涵部署脚本执行命令(安装/开始/停止服务)所需要的配置信息,这里所指的配置信息一般是手动部署集群需要配置的xml文件,例如hadoop-site.xml文件,在blueprint或单步创建里会有详细说明。
ambari-agent执行脚本。ambari-agent所执行的脚本存储在ambari-server 机器上的/var/lib/ambari-server/resources/stacks/HDP/2.0.6/下各个service路径下的package路径下的scripts内,脚本的编写语言为python,脚本继承了名为Script的父类,该父类提供了一些函数,例如Script.get_config(),该函数将agent接收来自server端的command-json文件的内容转化为字典格式方便脚本实现部署时对配置的使用。具体anent接收到的command-json保存在了运行agent机器下的/var/lib/ambari-agent/data路径下。