文档章节

Ambari自定义Service

o
 osc_a22drz29
发布于 2019/03/25 17:17
字数 1111
阅读 29
收藏 0

精选30+云产品,助力企业轻松上云!>>>

一、Ambari基本架构

 
img016.jpg

Ambari Server 会读取 Stack 和 Service 的配置文件。当用 Ambari 创建服务的时候,Ambari Server 传送 Stack 和 Service 的配置文件以及 Service 生命周期的控制脚本到 Ambari Agent。Agent 拿到配置文件后,会下载安装公共源里软件包(Redhat,就是使用 yum 服务)。安装完成后,Ambari Server 会通知 Agent 去启动 Service。之后 Ambari Server 会定期发送命令到 Agent 检查 Service 的状态,Agent 上报给 Server,并呈现在 Ambari 的 GUI 上。

二、创建Ambari自定义Service

#AmbariServer资源文件在/var/lib/ambari-server/resources目录
#cd到Ambari Stack目录下 (目前最新版为2.6)
cd /var/lib/ambari-server/resources/stacks/HDP/2.6/services
#创建自定义Service目录 (以大写ServiceName命令,这里以My Service为例)
mkdir MYSERVICE
cd MYSERVICE 

1.编辑metainfo.xml

<?xml version="1.0"?>
<metainfo> <schemaVersion>2.0</schemaVersion> <services> <service> <!-- --> <!-- 编写Service名称和Service信息 --> <name>MYSERVICE</name> <displayName>My Service</displayName> <comment>this is comment</comment> <version>1.0</version> <components> <component> <!-- 编写Master组件 --> <name>MYMASTER</name> <displayName>My Master</displayName> <category>MASTER</category> <cardinality>1</cardinality> <commandScript> <script>scripts/master.py</script> <scriptType>PYTHON</scriptType> <timeout>5000</timeout> </commandScript> </component> <component> <!-- 编写Slave组件 --> <name>MYSALVE</name> <displayName>My Slave</displayName> <category>SLAVE</category> <cardinality>1+</cardinality> <commandScript> <script>scripts/slave.py</script> <scriptType>PYTHON</scriptType> <timeout>5000</timeout> </commandScript> </component> </components> <osSpecifics> <osSpecific> <osFamily>any</osFamily> </osSpecific> </osSpecifics> </service> </services> </metainfo> 
  • components 下编写多个组件。
  • category 为组件的角色,支持Master、Slave、和Client
  • cardinality 为节点数量,可以为1、1+、或数值范围1-2
  • commandScript 为组件生命周期回调的脚本

2.编写Master组件生命周期回调脚本

mkdir -p package/scripts
vim package/scripts/master.py
import sys, os
from resource_management import *
from resource_management.core.exceptions import ComponentIsNotRunning from resource_management.core.environment import Environment from resource_management.core.logger import Logger class Master(Script): def install(self, env): print "Install My Master" def configure(self, env): print "Configure My Master" def start(self, env): print "Start My Master" def stop(self, env): print "Stop My Master" def status(self, env): print "Status..." if __name__ == "__main__": Master().execute() 

3.编写Slave组件生命周期回调脚本

package/scripts/slave.py
import sys, os
from resource_management import *
from resource_management.core.exceptions import ComponentIsNotRunning from resource_management.core.environment import Environment from resource_management.core.logger import Logger class Slave(Script): def install(self, env): print "Install My Slave" def configure(self, env): print "Configure My Slave" def start(self, env): print "Start My Slave" def stop(self, env): print "Stop My Slave" def status(self, env): print "Status..." if __name__ == "__main__": Slave().execute() 

4.重启AmbariServer

ambari-server restart

5.加入刚才添加的My Service服务

  • 在Ambari Web上。点击Actions-> Add Service 添加My Service服务


     
    WX20170728-150942@2x.png

三、丰富自定义Service功能

1.增加Service Check逻辑

在 Service 的 metainfo.xml 中,commandScript 字段就是用来配置 service check 脚本入口。如果一个 Service 的 metainfo.xml 有该字段,那么在 Service 的 Action 列表中就会出现“Run Service Check”这个命令。

当用户在 WEB 中点击“Run Service Check”时,Ambari Server 会随机通知一个该 Service 所在机器上的 Agent 进程,然后由 Agent 执行该 Service check 脚本。

<commandScript>
<script>scripts/master/my_check.py</script> <scriptType>PYTHON</scriptType> <timeout>300</timeout> </commandScript> 
 
WX20170728-152404@2x.png

2.增加Service 的配置项

这里需要在Service的metainfo.xml 中增加<configuration-dependencies>字段。该字段就是用来关联一个 Service 与配置项文件入口

每一行<config-type>字段,用来指定一个配置文件。一个 Service 可以同时指定多个配置文件。不过所有的配置文件必须放在 Service 的 configuration 目录中。

<!-- 以HDFS为例 -->
<metainfo>
  <services> <service> <!-- 省略... --> <configuration-dependencies> <!-- 在下面指定配置文件 --> <config-type>core-site</config-type> <config-type>hdfs-site</config-type> <config-type>hadoop-env</config-type> <config-type>hadoop-policy</config-type> <config-type>hdfs-log4j</config-type> <config-type>ranger-hdfs-plugin-properties</config-type> <config-type>ssl-client</config-type> <config-type>ssl-server</config-type> <config-type>ranger-hdfs-audit</config-type> <config-type>ranger-hdfs-policymgr-ssl</config-type> <config-type>ranger-hdfs-security</config-type> </configuration-dependencies> <restartRequiredAfterRackChange>true</restartRequiredAfterRackChange> </service> </services> </metainfo> 
#configuration目录下的文件:
[root@node1 2.1.0.2.0]# ll configuration/ total 84 -rwxr-xr-x 1 admin root 7948 May 27 10:11 core-site.xml -rwxr-xr-x 1 admin root 16723 May 27 10:11 hadoop-env.xml -rwxr-xr-x 1 admin root 6201 May 27 10:11 hadoop-policy.xml -rwxr-xr-x 1 admin root 8879 May 27 10:11 hdfs-log4j.xml -rwxr-xr-x 1 admin root 8192 May 27 10:11 hdfs-logsearch-conf.xml -rwxr-xr-x 1 admin root 19139 May 27 10:11 hdfs-site.xml -rwxr-xr-x 1 admin root 2627 May 27 10:11 ssl-client.xml -rwxr-xr-x 1 admin root 2959 May 27 10:11 ssl-server.xml 

配置文件中,其实就是指定了一些键值对的属性,以及一个描述。当在 Ambari 的 WEB 中增加这个 Service 时,Ambari Server 会读取这些信息,并显示到该 service 的配置页面中(Customize Service 和 config 页面)。默认情况下,如果一个配置项没有配置默认值,用户则必须输入。如果一个项允许为空,则需要在<property>中增加 require-input="false“的属性。

3.增加自定义Command

以RebalanceHDFS为例,在Service的metainfo.xml中增加以下内容
当点击RebalanceHDFS后 则触发scripts/namenode.py脚本

<customCommands>
  <customCommand>
    <name>REBALANCEHDFS</name> <background>true</background> <commandScript> <script>scripts/namenode.py</script> <scriptType>PYTHON</scriptType> </commandScript> </customCommand> </customCommands> 
 



o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
简单分析Ambari——顶级Hadoop管理方案

前面我们提到了两个比较火的Hadoop集群运维管理工具 Ambari和Cloudera Manager。它们集安装,配置,监控于一身,对于Hadoop的初学者可以起到很好的帮助作用。这篇文章就对Ambari着重介绍一下...

叁金
2018/05/25
0
0
Ambari里如何删除某指定的服务(图文详解)

Ambari 借鉴了很多成熟分布式软件的 API 设计。Rest API 就是一个很好地体现。通过 Ambari 的 Rest API,可以在脚本中通过 curl 维护整个集群。并且,我们可以用 Rest API 实现一些无法在 Am...

osc_k816frzg
2018/01/06
11
0
Ambari安装及自定义service初步实现

Ambari安装 1 Ambari简介 Apache Ambari项目的目的是通过开发软件来配置、监控和管理hadoop集群,以使hadoop的管理更加简单。同时,ambari也提供了一个基于它自身RESTful接口实现的直观、简单...

osc_uv42f7cs
2019/03/25
9
0
Apache Ambari 2.4 发布,Hadoop 管理监控

Apache Ambari 2.4 发布了,Apache Ambari是一种基于Web的工具,支持Apache Hadoop集群的供应、管理和监控。Ambari目前已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Z...

开源中国股侠
2016/09/08
2.7K
0
升级ambari、HDP版本(ambari 2.1升级到2.4、HDP2.3升级到2.5)

转载自:http://blog.csdn.net/levycui/article/details/52461377 官方升级版本说明 http://docs.hortonworks.com/HDPDocuments/Ambari-2.4.0.1/bkambari-installation/content/determinesta......

osc_k816frzg
2018/01/07
12
0

没有更多内容

加载失败,请刷新页面

加载更多

是否有可能从另一个git存储库中挑选一个提交? - Is it possible to cherry-pick a commit from another git repository?

问题: I'm working with a git repository that needs a commit from another git repository that knows nothing of the first. 我正在使用一个git存储库,需要从另一个不知道第一个存储库......

技术盛宴
2分钟前
0
0
【LeetCode】53 盛最多水的容器

题目 解题思路 双指针法: https://leetcode-cn.com/problems/container-with-most-water/solution/sheng-zui-duo-shui-de-rong-qi-by-leetcode-solution/ 代码 public class Solution { ......

JaneRoad
12分钟前
4
0
阿里云OSS配置CDN加速

首先购买CDN流量包 然后添加域名 添加好后 然后将域名OSS.xxxx.com 解析到 生成的CDN域名上 这样就完成了

可达鸭眉头一皱
12分钟前
7
0
js 整数与小数正则替换片段

说明 /(\d+)/g 整数 /(\d+\.\d+)rem/g 小数 /(\d+\.\d+|\d+)rem/g 其中 | 或 条件 例子 全局查找带 rem 单位的,替换成 px 单位 let text = text.replace(/(\d+\.\d+|\d+)rem/g, function(s......

DrChenXX
12分钟前
0
0
ubuntu下minicorba例子

一、开发环境安装 sudo apt install omniorb omniorb-idl omniidl libomniorb4-dev libomniorb4-2 omniorb-nameserver libomnithread4 libomnithread4-dev 二、源文件: Hi.idl module ......

wangxuwei
20分钟前
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部