Ambari——大数据平台的搭建利器
虽然大数据越来越流行,但其学习的门槛却一直阻碍着很多的分布式应用初学者或者大数据的业务应用开发者。多个产品之间的不兼容问题,快速集成和维护也显得比较困难。不管是Hadoop V1或者V2的安装,又或者Spark/YARN等的集成,都不是几行简单的命令可以完成的,而是需要手工修改很多的集群配置,这进一步增加了业务开发者的学习和使用难度。有了Ambari,这些都不再是难题。
Ambari 跟 Hadoop等开源软件一样,也是Apache Software Foundation中的一个项目,并且是顶级项目。目前最新的发布版本是2.0.1,未来不久将发布2.1版本。就Ambari的作用来说,就是创建、管理、监视Hadoop的集群,但是这里的Hadoop是广义,指的是Hadoop整个生态圈(例如Hive,Hbase,Sqoop,Zookeeper等),而并不仅是特指Hadoop。用一句话来说,Ambari就是为了让 Hadoop以及相关的大数据软件更容易使用的一个工具。
说到这里,大家就应该明白什么人最需要Ambari了。那些苦苦花费好几天去安装、调试Hadoop的初学者是最能体会到Ambari的方便之处的。而且,Ambari现在所支持的平台组件也越来越多,例如流行的Spark,Storm等计算框架,以及资源调度平台YARN等,我们都能轻松地通过Ambari来进行部署。
Ambari 自身也是一个分布式架构的软件,主要由两部分组成:AmbariServer和Ambari Agent。简单来说,用户通过Ambari Server通知Ambari Agent安装对应的软件;Agent会定时地发送各个机器每个软件模块的状态给Ambari Server,最终这些状态信息会呈现在Ambari的GUI,方便用户了解到集群的各种状态,并进行相应的维护。详细的操作和介绍会在后续章节介绍。
关于 Ambari 的安装,目前网上能找到两个发行版,一个是Apache的Ambari,另一个是Hortonworks的,两者区别不大。这里就以Apache的Ambari 2.0.1作为示例。本文使用三台Redhat 6.6作为安装环境(目前测试验证结果为Ambari在Redhat 6.6的版本上运行比较稳定),三台机器分别为 master、slaver1、slaver2。master计划安装为 Ambari的 Server,另外两台为 AmbariAgent。
安装Ambari 最方便的方式就是使用公共的库源(publicrepository)。有兴趣的朋友可以自己研究一下搭建一个本地库(localrepository)进行安装。这个不是重点,所以不在此赘述。在进行具体的安装之前,需要做几个准备工作。
1. SSH的无密码登录;
Ambari 的 Server会 SSH到 Agent 的机器,拷贝并执行一些命令。因此我们需要配置 Ambari Server到 Agent的 SSH 无密码登录。在这个例子里,master可以 SSH无密码登录 slaver1和 slaver2。
2. 确保 Yum可以正常工作;
通过公共库(public repository),安装 Hadoop这些软件,背后其实就是应用 Yum在安装公共库里面的 rpm包。所以这里需要您的机器都能访问 Internet。
3. 确保 home目录的写权限。
Ambari 会创建一些 OS用户。
4. 确保机器的 Python版本大于或等于 2.6.(Redhat6.6,默认就是 2.6的)。
以上的准备工作完成后,便可以真正的开始安装Ambari了。
首先需要获取 Ambari 的公共库文件(publicrepository)。登录到Linux主机并执行下面的命令(也可以自己手工下载):
wget http://public-repo-1.hortonworks.com/ambari/centos6/2.x/updates/2.0.1/ambari.repo
将下载的ambari.repo文件拷贝到Linux的系统目录/etc/yum.repos.d/。拷贝完后,我们需要获取该公共库的所有的源文件列表。依次执行以下命令。
yum clean all
yum list|grep ambari
如图1 所示:
yum install ambari-server
待安装完成后,便需要对Ambari Server做一个简单的配置。执行下面的命令。
amari-server setup
在这个交互式的设置中,采用默认配置即可。Ambari会使用Postgres数据库,默认会安装并使用Oracle的JDK。默认设置了 AmbariGUI的登录用户为admin/admin。并且指定 AmbariServer的运行用户为root。
简单的setup 配置完成后。就可以启动Ambari 了。运行下面的命令。
ambari-server start
当成功启动Ambari Server之后,便可以从浏览器登录,默认的端口为8080。以本文环境为例,在浏览器的地址栏输入http://master:8080,登录密码为admin/admin。登入Ambari之后的页面如下图。
至此,AmbariServer就安装完成了。
到这一节,我们将可以真正地体验到 Ambari的用武之地,以及它所能带来的方便之处。
登录Ambari 之后,点击按钮“LaunchInstall Wizard”,就可以开始创建属于自己的大数据平台。
第一步,命名集群的名字。本环境为 BigData。
第二步,选择一个Stack,这个Stack相当于一个Hadoop生态圈软件的集合。Stack的版本越高,里面的软件版本也就越高。这里我们选择HDP2.2,里面的对应的Hadoop版本为2.6.x。
第三步,指定Agent机器(如果配置了域,必须包含完整域名,例如本文环境的域为 org.cn),这些机器会被安装Hadoop等软件包。还记得在安装章节中提到的SSH无密码登陆吗,这里需要指定当时在Ambari Server机器生成的私钥(ssh-keygen生成的,公钥已经拷贝到Ambari Agent的机器,具体的SSH无密码登录配置,可以在网上很容易找到配置方法,不在此赘述)。另外不要选择“Perform manual registration onhosts and do not use SSH“。因为我们需要Ambari Server自动去安装Ambari Agent。具体参见下图示例。
第四步,AmbariServer会自动安装Ambari Agent到刚才指定的机器列表。安装完成后,Agent会向 AmbariServer注册。成功注册后,就可以继续Next到下一步。
第五步,这里我们终于看到跟Hadoop有关的名词了。在这一步,我们需要选择要安装的软件名称。本文环境选择了HDFS,YARN+ MapReduce2,Zoopkeeper,Storm以及 Spark。选的越多,就会需要越多的机器内存。选择之后就可以继续下一步了。这里需要注意某些Service是有依赖关系的。如果您选了一个需要依赖其他Service的一个Service,Ambari会提醒安装对应依赖的Service。参见下图。
第六步和第七步,分别是选择安装软件所指定的Master机器和Slave机器,以及Client机器。这里使用默认选择即可(真正在生产环境中,需要根据具体的机器配置选择)。
第八步,就是Service的配置。绝大部分配置已经有默认值,不需要修改。初学者,如果不需要进行调优是可以直接使用默认配置的。有些Service会有一些必须的手工配置项,则必须手动输入,才可以下一步。本文环境直接使用默认配置。
第九步,Ambari会总结一个安装列表,供用户审阅。这里没问题,就直接下一步。
第十步,Ambari会开始安装选择的Service到Ambari Agent的机器(如下图)。这里可能需要等好一会,因为都是在线安装。安装完成之后,Ambari就会启动这些Service。
注意:中间会出现多个安装问题:
1.安装中有配置不存在,查看详细error然后手动安装
2.安装中出现yum超时情况,将时间设置600s详细见(Ambari大数据的搭建环境准备.docx)
3.安装中会出现Python脚本执行1800s超时情况,解决办法:retry再次安装
或者电脑重启,yumclean all 清除安装,yummakecache 清除缓存。
4.安装完成后会启动相关软件,在启动中会出现启动失败或者警告,暂时不用管后续进入主页面后再次启动安装,原因是内存使用过高导致一起启动不了。
安装完成之后,就可以查看Ambari的Dashboard了。例如下图。
至此,您专属的bigdata 集群已经安装完成。
在上一章节中,我们已经体验到 Ambari为 Hadoop生态圈的安装提供的便利。这已经省去了很多的人力成本。尤其是对大数据圈子的测试人员来说,自动化就容易了很多。下面我们看看如何通过Ambari管理Hadoop的集群。
首先我们进到 Ambari 的 GUI 页面,并查看Dashboard。在左侧的Service列表中,我们可以点击任何一个您想要操作的Service。以MapReduce2为例(Hadoop这里的版本为 2.6.x,也就是YARN+HDFS+MapReduce),当点击MapReduce2后,就会看到该Service的相关信息,如下图。
中间部分是Service 的模块(Component)信息,也就是该Service有哪些模块及其数目。右上角有个Service Action的按钮,当点击该按钮后就可以看到很多Service的控制命令。也就是通过这些Service Action命令,对Service进行管理的。
可能有的人会说,装完Hadoop的集群后,并不知道这个集群是不是可用。这时候我们就可以运行一个“RunService Check”。点击这个命令后,就会出现下图的进度显示。
其实这里就是通过运行一个经典的MapReduce Wordcount实例,来检查MapReduce是不是正常。对于Service Action里面的Start、Stop的含义就是,启停整个集群所有该Service的模块(也就是Service level)。当执行进度页面弹出来的时候,我们可以点击Operations的名字,进而查看每个机器的进度和运行log。如下图 Stop的操作。
维护模式(MaintenanceMode)以及如何添加一个自定义的命令到Service Action,我会在后续的连载中进行介绍。
首先,我们回到 Ambari 的Dashboard 页面。页面最上面中间的地方有个Hosts,点击这个标签,我们就可以看到Ambari所管理的机器列表。如下图。
图片中红色的数字是警告信息(AmbariAlert),这里我们先略过它,后续文章再做介绍。先看左上角的Actions,点击这个按钮,就可以看到Host level Action 的选项了,其实和Service Level是类似的,只是执行的范围不一样。如下图。当用户选择All Hosts -> Hosts -> Start All Components,Ambari就会将所有Service的所有模块启动。
如果用户选择All Hosts-> DataNodes -> Stop,Ambari就会把所有机器的DataNode这个模块关闭。如下图。
上面的图中,我们可以看到 Decommisson、Recommission。这些命令其实是自定义的模块级别的操作(ComponentLevel Action)。不过上图中命令一旦执行,就是对多个机器的同个模块执行。
我们现在尝试只对单个机器的一个模块(Component)执行。首先我们回到 Hosts的页面。这时候点击机器名,我们就会进入到该机器的Component页面。如下图。
这时候只要点击每个Component(模块)后面的按钮,就可以看到该模块的操作命令了。例如,我们可以停掉这台机器的DataNode模块。
关于如何给一个模块添加自定义的命令,也会在后续的连载中做介绍。
这一章节中,主要介绍了如何通过三种级别的Action(操作)管理Hadoop的集群。在Ambari中已经加入了很多自定义的Action去做一些特殊的操作。如果对Hadoop生态圈的软件足够熟悉,就可以尝试更多的Action。可能有的人会问,Ambari可不可以扩容集群。答案当然是可以的。Ambari可以给自身的集群添加机器(也就是添加Ambari Agent),然后将Service的模块安装在新的机器,也可以把某些模块安装到已有的其他的机器。篇幅有限,将在后续的连载中介绍更多的内容。
Ambari 基本的架构和工作原理如下图 17所示。
Ambari Server 会读取 Stack和Service的配置文件。当用Ambari创建集群的时候,AmbariServer传送Stack和Service 的配置文件以及Service生命周期的控制脚本到Ambari Agent。Agent拿到配置文件后,会下载安装公共源里软件包(Redhat,就是使用 yum 服务)。安装完成后,AmbariServer会通知Agent去启动Service。之后Ambari Server会定期发送命令到Agent检查Service的状态,Agent上报给 Server,并呈现在 Ambari的 GUI 上。
Ambari Server 支持 RestAPI,这样可以很容易的扩展和定制化Ambari。甚至于不用登陆Ambari的GUI,只需要在命令行通过curl就可以控制Ambari,以及控制Hadoop的cluster。具体的API可以参见Apache Ambari的官方网页API reference。
对于安全方面要求比较苛刻的环境来说,Ambari可以支持Kerberos认证的Hadoop集群。
首先,我们需要规划自定义的 Service属于哪个 Stack(当然 Stack也是可以自定义的)。这里为了快速创建一个新的Service,而且我们已经安装了HDP 2.2的Stack,所以就将自定义的Service放在HDP 2.2之下。
第一步,首先在Ambari Service机器上找到HDP 2.2 Stack的目录,如下图所示。
第二步,需要创建一个Service目录,我们这里用“SAMPLE”作为目录名。并在 SAMPLE底下创建metainfo.xml。示例代码如下。主要解释下xml代码中的两个字段category和cardinality。category指定了该模块(Component)的类别,可以是 MASTER、SLAVE、CLIENT。Cardinality指的是所要安装的机器数,可以是固定数字1,可以是一个范围比如1-2,也可以是 1+,或者 ALL。如果是一个范围的时候,安装的时候会让用户选择机器。另外这里有关Service和Component的name 配置要用大写,小写有时候会有问题。Displayname可以随意设置。
2.0
SAMPLE
My Sample
My v1 Sample
1.0
MYMASTER
My Master
MASTER
1
PYTHON
5000
MYSALVE
My Slave
SLAVE
1+
PYTHON
5000
any
第三步,需要创建Service的控制脚本。这里我们需要在SAMPLE底下创建一个package目录,然后在package底下创建目录scripts,进而创建master.py和slave.py。这里需要保证脚本路径和上一步中metainfo.xml中的配置路径是一致的。这两个Python脚本是用来控制Master和Slave模块的生命周期。脚本中函数的含义也如其名字一样:install就是安装调用的接口;start、stop分别就是启停的调用;Status是定期检查component状态的调用;Configure是安装完成配置该模块的调用。示例目录结构如下图。
Python 脚本的示例代码:(注意Python中代码缩进问题,务必再安装前先测试一下,如果安装失败,需要修改相应的py然后再次重启服务重新安装)
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()
第四步,需要重启Ambari Server。因为Ambari Server只有在重启的时候才会读取Service和Stack的配置。命令行执行:
ambari-server restart
第五步,登录Ambari 的GUI,点击左下角的 Action,选择 AddService。如下图:
这时候就可以看到我们自定义的Service:SAMPLE。如下图:
选择左侧My Sample 后,就可以一路Next 了,这个过程其实和我们在搭建Hadoop2.x集群的时候是类似的。由于这个Service没有真的安装包,所以安装过程会非常的快,启动命令也没有真正的逻辑,所以启动过程也是很快的。等最后点击完Complete,整个安装过程也就结束了。再回到Ambari的Dashboard的时候,我们就可以看到这个My Sample了,如下图:
到此就可以和第四节中管理Hadoop集群一样管理我们的My Sample。例如下图,Stop我们的 MySample。
进阶的篇幅中,将会探讨如何给我们的My Sample自定义一些Actions,以及Action之间的依赖关系如何定义。篇幅有限,这里就先到此为止。希望以上的介绍能够燃起大家对Ambari的热情。
大数据与云计算可谓是如今数据中心中最火的两项技术领域,几乎所有的 IT服务商都想在这两项技术中有所建树。相信Ambari可以帮助一些Hadoop的初学者。长远看来,大数据的发展离不开云计算,云计算中IaaS可谓已经很成熟,并且价格低廉。这时候许多公司将目光聚集在了PaaS。大数据的流行更是加速了相关PaaS产品的发展,而Ambari的出现必然可以拉近IaaS和PaaS的距离。也就是说有了Ambari,或许再加上Docker,那么快速从IaaS演进到PaaS就显得不是那么困难了。
当然这里Ambari 要跟IaaS 更好的切合,还有个对手那就是Sahara。它是另一个土生土长的OpenStack的子项目,其目的也是为了在Openstack上面快速搭建Hadoop等集群。期望着这些项目能够快速成长,将来对大家都有所帮助。