ambari平台分析(之架构和工作原理)
ambari平台分析(之架构和工作原理)虽然我也很舍不得但是还是要忍痛继续今天我们要对Ambari来个结尾了但是作为一个爱学习的好学生我还是觉得我们继续学习才能改变自己才能走上人生巅峰
亲爱的同学们
俺老孙来也~~
大家放假回来是不是非常的不适应~
俺老孙也是现在就想各种瘫~
但是作为一个爱学习的好学生
我还是觉得我们继续学习才能改变自己
才能走上人生巅峰
今天我们要对Ambari来个结尾了
虽然我也很舍不得但是还是要忍痛继续
前几次讲了怎么安装怎么部署集群管理集群
今天我们讲个基础的
Ambari的基本的架构和工作原理
打好基础才是为了研究的更远
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 的基本架构
Ambari Server 支持 Rest API,这样可以很容易的扩展和定制化 Ambari。甚至于不用登陆 Ambari 的 GUI,只需要在命令行通过 curl 就可以控制 Ambari,以及控制 Hadoop 的 cluster。具体的 API 可以参见 Apache Ambari 的官方网页 API reference。
对于安全方面要求比较苛刻的环境来说,Ambari 可以支持 Kerberos 认证的 Hadoop 集群。
接下来我们来学一下扩展 Ambari 管理一个自定义的 Service
1
首先,我们需要规划自定义的 Service 属于哪个 Stack(当然 Stack 也是可以自定义的)。这里为了快速创建一个新的 Service,而且我们已经安装了 HDP 2.2 的 Stack,所以就将自定义的 Service 放在 HDP 2.2 之下。
第一步,首先在 Ambari Service 机器上找到 HDP 2.2 Stack 的目录,如下图所示。
HDP 2.2 的目录
2
第二步,需要创建一个 Service 目录,我们这里用“SAMPLE”作为目录名。并在 SAMPLE 底下创建 metainfo.xml。示例代码如下。主要解释下 xml 代码中的两个字段 category 和 cardinality。category 指定了该模块(Component)的类别,可以是 MASTER、SLAVE、CLIENT。Cardinality 指的是所要安装的机器数,可以是固定数字 1,可以是一个范围比如 1-2,也可以是 1 ,或者 ALL。如果是一个范围的时候,安装的时候会让用户选择机器。另外这里有关 Service 和 Component 的 name 配置要用大写,小写有时候会有问题。Displayname 可以随意设置。
<?xml version="1.0"?>
<metainfo>
<schemaVersion>2.0</schemaVersion>
<services>
<service>
<name>SAMPLE</name>
<displayName>My Sample</displayName>
<comment>My v1 Sample</comment>
<version>1.0</version>
<components>
<component>
<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>
<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>
3
第三步,需要创建 Service 的控制脚本。这里我们需要在 SAMPLE 底下创建一个 package 目录,然后在 package 底下创建目录 scripts ,进而创建 master.py 和 slave.py。这里需要保证脚本路径和上一步中 metainfo.xml 中的配置路径是一致的。这两个 Python 脚本是用来控制 Master 和 Slave 模块的生命周期。脚本中函数的含义也如其名字一样:install 就是安装调用的接口;start、stop 分别就是启停的调用;Status 是定期检查 component 状态的调用;Configure 是安装完成配置该模块的调用。示例目录结构如下图。
Sample Service 的目录结构
Python 脚本的示例代码:
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()
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
第四步,需要重启 Ambari Server。因为 Ambari Server 只有在重启的时候才会读取 Service 和 Stack 的配置。命令行执行:
ambari-server restart
5
第五步,登录 Ambari 的 GUI,点击左下角的 Action,选择 Add Service。
这时候就可以看到我们自定义的 Service:SAMPLE。
Sample Service 列表
选择左侧 My Sample 后,就可以一路 Next 了,这个过程其实和我们在搭建 Hadoop2.x 集群的时候是类似的。由于这个 Service 没有真的安装包,所以安装过程会非常的快,启动命令也没有真正的逻辑,所以启动过程也是很快的。等最后点击完 Complete,整个安装过程也就结束了。再回到 Ambari 的 Dashboard 的时候,我们就可以看到这个 My Sample 了。
My Sample 的 Service 页面
到此就可以和管理 Hadoop 集群一样管理我们的 My Sample。
例如下图,Stop 我们的 My Sample。
Stop Sample 页面 1
Stop Sample 页面 2
Stop Sample 页面 3
现如今数据中心最火的两项技术领域,一个是大数据 一个是云计算,几乎所有的 IT 服务商都想在这两项技术中搞点事情!相信 Ambari 可以帮助一些 Hadoop 的初学者。长远的来看呢,大数据的发展离不开云计算,云计算中 IaaS 可谓已经很成熟而且价格低,这时候许多公司将目光聚集在了 PaaS,大数据的流行更是加速了相关 PaaS 产品的发展,而 Ambari 的出现必然可以拉近 IaaS 和 PaaS 的距离,也就是说有了 Ambari Docker,那么快速从 IaaS 演进到 PaaS 就不是那么难了!
但是!!Ambari 要跟 IaaS 更好的结合,总会有小三不断的捣乱,Sahara就是这个捣乱的小三!它是另一个土生土长的 Openstack 的子项目,其目的也是为了在 Openstack 上面快速搭建 Hadoop 等集群,这么看来 大家的学习之路还很漫长,一定不要懈怠哦。
希望这段时间的讲解能够燃起大家对 Ambari 的热情!