Ambari是什么?简单介绍一下,Ambari是hadoop的管理平台,提供hadoop集群部署、管理和监控的服务。
HDP已经提供当下一些流行的大数据处理框架,hdfs、hbase、spark、flume等等,当我们想通过Ambari增加对于其他框架的支持时,我们应该怎么做? Ambari也提供了方便的扩展,步骤如下:
先定义一个概念 Stack ,Service,Component
项目 | 描述 |
Stack | 一系列Service组成的软件包,一个Stack可以包含多个版本,例如Stack=HDP-1.3.3 |
Service | 多个Component(master,slave,client)组成,例如Service=HDFS |
Component | 独立的Component有制定的生命周期:start,stop,instal,etc.例如:Service = HDFS,拥有组件NameNode(master),Secondary NameNode(master),DataNode(Slave) ,HDFS Client(client) |
1. ambari stack 定义的文件和结构
metainfo.xmlmetrics.json|_configuration my-config-env.xml|_package |_scripts master.py slave.py client.py service_check.py params.py
metainfo.xml 定义什么stack,怎么安装,执行什么脚本
2.0 DUMMY_APP My Dummy APP This is a distributed app. 0.1 DUMMY_MASTER Dummy Master Component MASTER 1 PYTHON 600 MYCOMMAND PYTHON 600 DUMMY_SLAVE Dummy Slave Component SLAVE 1+ PYTHON 600 DUMMY_CLIENT Dummy Client Component CLIENT 0+ PYTHON 600 any imagemagick dummy-app PYTHON 300 HDFS YARN my-config-env
metainfo.xml 结构
Service
Service是你安装的服务,包含components, osSpecifics, commandScript, requiredServices 和configuration-dependencies
DUMMY_APP My Dummy APP This is a distributed app. 0.1 ... ... ... ... ...
components
components 定义你要分发应用的拓扑结构。当前示例我们有MASTERnode,SALVE nodes 和 CLIENT。Ambari 期望知道如何管理分布应用的拓扑结构。
DUMMY_MASTER Dummy Master Component MASTER 1 PYTHON 600 MYCOMMAND PYTHON 600
比较重要的标签是category,cardinality和commandScript。
category:包含三种 MASTER, SLAVE 和 CLIENT 。每个节点可以安装任意的组合
Cardinality:每个组件可以有多少个节点安装。在这个例子中,1个master,1+ slaves 和 0+ clients
command script :执行的脚本
OS Specifics
该标签描述这个组件需要的依赖。Ambari 会使用yum或者apt-get去安装这些依赖。
any imagemagick dummy-app
osFamily : 支持 Linux 的发行版本,如 redhat6, suse11, ubuntu12
package :依赖的包,Ambari 会使用yum或者apt-get去安装这些依赖。
Command Script
commandScript: 管理服务的脚本位置,现在脚本只支持python脚本,下面是脚本的示例
import sysfrom resource_management import *class DummyMaster(Script): def install(self, env): import params env.set_params(params) print 'Install the Master' self.install_packages(env) def stop(self, env): print 'Stop the Master' def start(self, env): import params env.set_params(params) print 'Start the Master' def status(self, env): print 'Status of the Master'if __name__ == "__main__": DummyMaster().execute()
-
install
只在service 安装时执行。调用Ambari安装通过self.install_packages(env)。查找安装依赖列表。params 是 参数模块,下面会介绍。
-
start
在WebUI中执行start service时调用,类似于service myservice start 之类
-
stop
stop service
-
status
Ambari 自动执行,用来查找当前服务的状态
resource_management
Ambari 提供python方法执行系统级别的命令。脚本目录在../resource_management/core内,可以都查看一下,比较有用。写执行脚本时,都需要引用一下
from resource_management import *
Execute()
python执行系统命令,可以提供超时、尝试、不同用户执行、条件检查
示例如下:
Execute( 'mkdir -P /tmp/myservice', logoutput = True )
上面示例 创建/tmp/myservice 文件夹,记录log输出,并且在Ambari UI中显示
ExecuteHadoop()
执行hadoop --config命令
import paramsExecuteHadoop('fs -mkdir -p /tmp/myservice', user=params.hdfs_user, logoutput=True, conf_dir=params.hadoop_conf_dir, try_sleep=3, tries=5, bin_dir=params.hadoop_bin_dir)
创建HDFS://tmp/myservice目录,指定使用的 hdfs的用户
format()
格式化字符串,下例会输出 foo bar baz
localVar = "bar"print format("foo {localVar} baz")
Component Status
这个status比较重要,ambari会定时使用这个方法去显示组件的状态和执行各种操作前的验证。举个例子,如果你想删除这个组件,Ambari必须等待直到这个组件停止。这块如果没有配置好,这个组件将永远不能删除。
Ambari提供了比较便利获取pid的方法,这样很容易判断进程是否存活。获取如下:
def status(self, env): print 'Status of the Dummy Master' dummy_master_pid_file = "/tmp/dummy_master.pid" check_process_status(dummy_master_pid_file)
check_process_status() 检查进程状态,如果该进程以dump.pid中PID运行,将正常退出
Ambari 将获得返回的状态,显示在界面上,如果有错误,将标记成stopped
Service Status
服务状态不同于组件状态,是整个组件的状态。这个方法只在Master中运行,只能由Ambari WebUI的用户调用。check脚本如下:
PYTHON 300
Custom Commands
customCommand 跟commandScript类似。但是必须包含与name标签一样名字的方法。
Required Services
需要安装service 前必须安装的依赖。
HDFS YARN
Configuration Dependencies
配置文件依赖。用户可以通过Ambari Web UI 进行服务配置的修改。所有的属性都定义在xml中。 上面示例中有个配置文件叫做my-config-env,下面介绍一下结构
dummy_user dummy Dummy App User Name. dummy_var 123 Dummy Variable.
...def install(self, env): # Import the Resource Management package from resource_management import * # Load the all configuration files config = Script.get_config() # Bind to a local variable dummy_user = config['configurations']['my-config-env']['dummy_user'] print 'Install the Master.' # Install packages self.install_packages(env) # Create a new user and group Execute( format("groupadd -f {dummy_user}")) Execute( format("useradd -s /bin/bash {dummy_user} -g {dummy_user}")) print 'Installation complete.'...
在执行install中,我们使用Scirpt.get_config()获得所有配置文件中的变量
全局变量
在安装过程中,我们需要知道哪些是master,哪些是slaves
# Import the Resource Management packagefrom resource_management import *config = Script.get_config()# Find the master node and the slaves list for our DUMMY_APP servicemasterNode = config['clusterHostInfo']['dummy_app_master_hosts'][0]slaveList = config['clusterHostInfo']['dummy_app_slave_hosts']
安装新的Stack
将DUMMY_SERVICE拷贝到/var/lib/ambari-server/resources/stacks/HDP/2.4/services/DUMMY_SERVICE
重启Ambari-Service restart
安装界面
1.Ambari Dashboard
2.选择Actions>Add Service
3.安装服务界面
4.选择master节点
5。选择salves 节点
6. 配置服务
安装成功