前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据Ambari自定义服务详细介绍

大数据Ambari自定义服务详细介绍

原创
作者头像
house.zhang
修改2022-03-30 10:24:21
1.9K0
修改2022-03-30 10:24:21
举报
文章被收录于专栏:大数据及人工智能

一、背景知识介绍

四年多前,入职一家大厂大数据部门主要工作就是从ambari集成大数据组件服务开始做起,当时需要把机器学习平台集成到大数据平台,当时把ambari进行了大量的修改,形成了一套完整的私有化平台,不仅是换了一层皮肤,而且把企业当中自研的组件和服务也集成进来,还在上面加入了用户登陆体系、安全认证体系、监控告警体系、license管理、自动增机器,在我看来应该是ambari最深入使用的一波人了。

Ambari 内置服务包括Ambari 自己都是以rpm 包方式存放于repositories中。Ambari 一般有四个 repositories,具体如下:

代码语言:javascript
复制
1.Ambari:存放 ambari server, ambari agent, 和相关监控软件
2.HDP:存放 stack 软件包
3.HDP-UTILS:存放安装 Ambari 和 HDP 的公用包,例如:Ganglia, Nagios, Snappy, Rrd 等
4.EPEL:存放企业版本 Linux 所需的额外包,此外还有安装 Ambari 时需要的额外包。

在界面点击添加服务时,ambari 会从默认仓库下载服务。Ambari1.7 内置了 flume, hbase, hdfs, hive, kafka, knox, falcon, oozie, pig, slider, sqoop, strom, tez, yarn, zookeeper 等 15 个服务。

1、服务组成

Ambari 中主要从一下几个方面对服务进行定义。如下图:

metainfo.xml

服务元描述信息,可以在文件中对服务的版本,组建,执行脚本,适用操作系统,服务间依赖关系,安装包名等进行配置。Metainfo.xml 的编写需要对它的标签进行了解。具体后续可参考添加服务中 DEMO 的metainfo 编写。

metrics.json

配置服务的度量信息,这部分和 ganglia 相关。后续会有相关文档进行具体介绍。但是对于新加服务不是必须具备的文件。

configureation

服务配置文件存放路径。用户配置文件需要固定放到这个目录下。并且如果用户想在界面对配置文件进行操作,那么配置文件必须满足 ambari 要求的格式。也就是 xml,并且具备固定标签。例如:

代码语言:javascript
复制
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>demo.name</name>
<value>hello world</value>
<description>This is a name</description>
</property>
</configuration>

package

存放服务相关脚本模版等。Package 下面又分为 files, scripts, templates 三个文件夹。其中 scripts 主要存放脚本。也就是 metainfo.xml中用户配置的模块起停命令执行脚本。Files 存放服务需要的其它文件,例如 sh,py 都可以。Templates 存放服务模版信息。Ambari 部署服务时会调用脚本根据用户编写的模版信息生成对应配置文件。提供给服务、告警服务、监控服务使用。

2、ambari 服务部署路径

Ambari 中服务部署需要放在固定的路径下。具体路径如下所示:

注:ambari 中部署的 DEMO 服务路径为:

/var/lib/ambari-server/resources/stacks/HDP/2.2/services/DEMO

3、ambari 服务配置扭转

对于 Ambari 中显示在页面上各个服务的配置信息。有两种途径可以添加。一种,直接修改 Ambari 里配置对应的 js,第二种,在服务路径的 configuration中添加配置。显示在页面的配置信息,若发生更改,ambari 便会把配置存储到 db 中。Agent 定时向 ambari 服务发起心态。若机器对应服务的配置发生了更改,ambari 变回把配置以 json 格式放在 heartbeat 的回包中。由用户自己写脚本进行分析落地到指定目录。

二、准备工作

1.Service 打成 rpm 包

Rpm 包它有固定结构。如下图:

简单 rpm 制作可参考:

http://blog.csdn.net/kongxx/article/details/43761295

2.把 rpm 放到仓库并配置 yum 源

Ambari 用 yum 来进行 rpm 包的安装管理,需要把制作好的 rpm 包放到 yum 仓库。本实践中,创建了一个本地 yum 源。

具体配置可参考: http://blog.csdn.net/algothinking/article/details/10719183

三、添加新服务(以 DEMO 为例)

Ambari 所有服务描述存放于:

/var/lib/ambari-server/resources/stacks/HDP/ 路径的某个版本下。版本与版本直接可以进行继承。具体描述可以在版本路径下的 metainfo.xml 看到。例如: /var/lib/ambari-server/resources/stacks/HDP/2.2 下的描述文件 metainfo.xml 为:

代码语言:javascript
复制
<metainfo>
    <versions>
    <active>true</active>
    </versions>
    <extends>2.1</extends>
</metainfo>

表示 2.2 版本配置软件都继承于 2.1。策略上,若 2.2 存在和 2.1 相同的配置则覆盖。 增加新服务,需要按照 ambari 的目录结构进行创建。并且对编写服务元信息。具体如下:

1.创建 DEMO 服务文件夹

mkdir /var/lib/ambari-server/resources/stacks/HDP/2.0.6/services/DEMO

2.创建 metainfo.xml 描述文件

vi /var/lib/ambari-server/resources/stacks/HDP/2.0.6/services/DEMO/metainfo.xml

文件内容如下:

代码语言:html
复制
<?xml version="1.0" encoding="utf-8"?>

<metainfo> 
  <schemaVersion>2.0</schemaVersion>  
  <services> 
    <service> 
      <name>DEMO</name>  
      <displayName>DEMO</displayName>  
      <comment>hello world</comment>  
      <version>1.0.0</version>  
      <components> 
        <component> 
          <name>DEMO_MASTER</name>  
          <displayName>helloworld Master</displayName>  
          <category>MASTER</category>  
          <cardinality>1</cardinality>  
          <commandScript> 
            <script>scripts/master.py</script>  
            <scriptType>PYTHON</scriptType>  
            <timeout>600</timeout> 
          </commandScript> 
        </component>  
        <component> 
          <name>DEMO_SLAVE</name>  
          <displayName>helloworld Slave</displayName>  
          <category>SLAVE</category>  
          <cardinality>1+</cardinality>  
          <commandScript> 
            <script>scripts/slave.py</script>  
            <scriptType>PYTHON</scriptType>  
            <timeout>600</timeout> 
          </commandScript> 
        </component>  
        <component> 
          <name>DEMO_CLIENT</name>  
          <displayName>helloworld client</displayName>  
          <category>CLIENT</category>  
          <cardinality>1+</cardinality>  
          <commandScript> 
            <script>scripts/client.py</script>  
            <scriptType>PYTHON</scriptType>  
            <timeout>600</timeout> 
          </commandScript>  
          <customCommands> 
            <customCommand> 
              <name>DECOMMISSION</name>  
              <commandScript> 
                <script>scripts/resourcemanager.py</script>  
                <scriptType>PYTHON</scriptType>  
                <timeout>600</timeout> 
              </commandScript> 
            </customCommand> 
          </customCommands> 
        </component> 
      </components>  
      <requiredServices> 
        <service>MAPREDUCE</service>  
        <service>ZOOKEEPER</service> 
      </requiredServices>  
      <osSpecifics> 
        <osSpecific> 
          <osFamily>redhat5,redhat6,suse11</osFamily>  
          <packages> 
            <package> 
              <name>helloworld</name> 
            </package> 
          </packages> 
        </osSpecific> 
      </osSpecifics> 
    </service> 
  </services> 
</metainfo>

上面信息描述了 DEMO 服务,版本 1.0.0,有三个组建:DEMO_MASTER, DEMO_SLAVE, DEMO_CLIENT。其中,DEMO_MASTER 角色是 MASTER,

执行脚本是master.py,其它组建定义类似。在 ambari 中对于组建默认三个角色: master,slave,client。每种角色都有自己默认的动作。具体如下:

用户也可以自己定义动作,例如 DEMO_CLIENT 自定义了 DECOMMISSION 动作,具体描述见上面 metainfo.xml 文件。

3.编写执行脚本

mkdir

/var/lib/ambari-server/resources/stacks/HDP/2.0.6/services/DEMO/package/scripts

在 scripts 文件夹中, 放 metainfo.xml 中提到的三个脚本: master.py, slave.py,client.py。其中需要注意的是,每个脚本需要实现角色具备动作对应的函数。这里以 master.py 为例,内容如下:

代码语言:javascript
复制
import sys import os
from resource_management import * class Master(Script):

def install(self, env): 
    self.install_packages(env)

def start(self, env):
    print 'start the helloworld';
    val= os.system("/usr/bin/helloworld") print val

def configure(self, env):
   print 'Configure the config client';

def stop(self, env):
   print 'Stop the helloworld';

def status(self, env):


print 'Status of the Demo Master';

if _name_ == " main ": 
     Master().execute()

注:函数方法名固定的,和动作对应。

4.增加配置文件

mkdir

/var/lib/ambari-server/resources/stacks/HDP/2.0.6/services/DEMO/configuration

在文件夹 configuration 下,可以放服务对应的配置文件。配置文件需符合

ambari 约定格式。具体内容如下:

四、DEMO 结果展示

这里简单介绍下ambari,有ambari集成相关的问题,可以关注咨询。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景知识介绍
    • 1、服务组成
      • 2、ambari 服务部署路径
        • 3、ambari 服务配置扭转
        • 二、准备工作
          • 1.Service 打成 rpm 包
            • 2.把 rpm 放到仓库并配置 yum 源
            • 三、添加新服务(以 DEMO 为例)
              • 1.创建 DEMO 服务文件夹
                • 2.创建 metainfo.xml 描述文件
                  • 3.编写执行脚本
                    • 4.增加配置文件
                    • 四、DEMO 结果展示
                    相关产品与服务
                    大数据处理套件 TBDS
                    腾讯大数据处理套件(Tencent Big Data Suite,TBDS)依托腾讯多年海量数据处理经验,基于云原生技术和泛 Hadoop 生态开源技术提供的可靠、安全、易用的大数据处理平台。 TBDS可在公有云、私有云、非云化环境,根据不同数据处理需求组合合适的存算分析组件,包括 Hive、Spark、HBase、Flink、Presto、Iceberg、Elasticsearch、StarRocks 等,以快速构建企业级数据湖仓。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档