博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ambari 增加新的stack示例
阅读量:7117 次
发布时间:2019-06-28

本文共 7910 字,大约阅读时间需要 26 分钟。

hot3.png

    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. 配置服务

 

安装成功

 

 

 

 

转载于:https://my.oschina.net/u/2277929/blog/666180

你可能感兴趣的文章
iOS 仿射变换(CGAffineTransform)
查看>>
第一章:docker安装
查看>>
【TCP/IP指南(卷I)读书笔记】第一篇 TCP/IP概述与背景知识
查看>>
Linux虚拟机上安装
查看>>
js 高级
查看>>
理解操作系统相关知识
查看>>
Java重定向IO
查看>>
JDK源码阅读(三):ArraryList源码解析
查看>>
创业初期和员工一起喝酒的CEO,融资后怎么就爱上“996”了
查看>>
iOS怎样获取设备唯一标识符
查看>>
ASP.NET MVC 下拉框的传值的两种方式
查看>>
流文件_从网络中获取文件
查看>>
关不掉之以假乱真
查看>>
NOIP双栈排序
查看>>
tomcat 配置自签名ssl证书
查看>>
原型模式
查看>>
P3153 [CQOI2009]跳舞
查看>>
啥?客户叫在DataGridView的左上角添加CheckBox?
查看>>
第一次博客作业 <西北师范大学| 周安伟>
查看>>
C++ UI资源
查看>>