Ambari是Apache推出的一个集中管理Hadoop的集群的一个平台,可以快速帮助搭建Hadoop及相关以来组件的平台,管理集群方便。这篇博客记录Ambari的相关问题和注意事项。方便为初学者省去搭配各个社区版的烦恼。
在Ambari的官方WIKI上介绍了如何去使用Ambari,[ 官方文档 ]。官方说法比较简要,下面我补充相关注意事项,并给大家罗列一个详细的步骤。
首先,节点(物理机)需要实现准备好,这里笔者准备了5台节点,大家可以按需选择。所使用的系统为CentOS6.6,JDK为1.7,MySQL为5.1;另外,需要各个节点SSH面密码登录,关闭各个节点的防火墙,selinux置为disabled。这些环境的准备较为简单,这里就不多赘述了。大家可以利用搜索引擎去完成。
在deploy的过程当中,会出现一些忽略的环境因素,首先是时间同步问题,在HBase集群之间需要保证时间的一致性(或是时间间隔极短),否则,时间不同步,会导致HBase集群异常,因而,这里我们可以事先将时间同步,命令如下所示:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #设置时区为北京时间,这里为上海,因为centos里面只有上海
0-59/10 * * * * /usr/sbin/ntpdate us.pool.ntp.org | logger -t NTP
在管理Ambari的Meta时,这里我们会使用MySQL去做存储,因而,是需要用到MySQL的Driver的,这个在我们配置或启动Ambari的Server会有提示,不用过早去准备(有2个位置需要用到,/usr/share/java和/usr/lib/ambari-server会需要用到该依赖包)。这里,我们可以提前将Ambari的数据库和表在MySQL中创建,创建的脚本在/var/lib/ambari-server/resources,使用在MySQL中使用以下命令来完成,内容如下所示:
source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql
另外,在WebUI中,分配节点之前会对各个节点进行校验,这里笔者在校验过程当中出现以下异常,解决方案如下:
页面报出以下错误: The following hosts have Transparent HugePages (THP) enabled。THP should be disabled to avoid potential Hadoop performance issues. 解决办法,在Linux下执行: echo never >/sys/kernel/mm/redhat_transparent_hugepage/defrag echo never >/sys/kernel/mm/redhat_transparent_hugepage/enabled echo never >/sys/kernel/mm/transparent_hugepage/enabled echo never >/sys/kernel/mm/transparent_hugepage/defrag
Install, setup and start Ambari server by default. Reach "Choose services" phase of installer. Actual result: "Confirm hosts" shows warning that ntpd service isn't running on hosts, but it's running in console by command service ntpd status
在启动系统的ntpd后,最后将其设置为开机自启。命令如下所示:
chkconfig ntpd on
在完成上述内容后,准备工作基本算是完成了,接下来的工作就是去对各个组件的集成。
关于组件的选择,大家可以按需而择,后续若是有其他需求可以追加组件功能。节点角色的分配这里需要注意,若是要配置HA,得放在后续配置,这里得SNameNode表示Secondary NameNode,需要和NameNode配置在一起使用,否则会对集群带来异常。如下图为笔者在跳板机的部分截图:
之后,我们需要对Hive的Meta的存储介质进行配置,这里我们指定MySQL的地址之后,点击Deploy进行部署,下图为等待部署:
等待起完成即可。
Ambari采用的并不是新的架构,只是充分利用了一些优秀的开源软件及其思想,将其巧妙的结合,使其在分布式环境中能够做到集群式服务管理、监控、展示等。Ambari的架构采用的是C/S模型,即:Server/Client模式,能够集中式管理分布式集群的安装配置及部署。Ambari除了ambari-server和ambari-agent,另外它还提供了一个界面优美的管理监控页面ambari-web,这些页面由ambari-server提供。ambari-server对外开放了 REST API ,这些用途有二,其一用于为ambari-web提供管理监控服务,其二用于与ambari-agent交互,接受ambari-agent向ambari-server发送的心跳请求。官方给出的架构图如下所示:
ambari-agent是一个无状态的,主要功能如下所示:
因而,它有两种队列:MessageQueue和ActionQueue。
架构图如下所示:
而对于ambari-server来说,其是一个有状态的,它维护着自己的一个有限状态FSM。同时这些状态存储与数据库当中(DB目前可以支持多种,可按序自选),Server端主要维持三类状态:
其架构图如下所示:
ambari-server的Heartbeat Handler模块用于接收各个Agent的心跳请求(其中包含节点状态信息和返回的操作结果),把节点状态信息传递给图中的FSM模块去维护该节点的状态,并把响应之后的操作结果信息返回给Action Manager去做更加详细的处理。Coordinator模块可以看作API Handler,主要在接收Web端操作请求后,校验其合法性,Stage Planner分解成一组操作,最后提供给Action 过 Manager去完成执行操作。
因而,从上图中,我们可以看出,ambari-server的所有状态信息的维护和变化都会被记录在数据库当中,使用者做一些更改服务的操作都会在数据库商做对应的记录,同时,Agent通过心跳来获取数据库的变动历史信息。
在部署Ambari时,主机节点的硬件配置,内存不能过低,标准的服务器配置即可。另外,从Ambari的结构图来看,架构虽然谈不上新颖,但各个模块职责分明,能够充分利用优秀的开源中间件来进行组合,对于我们去涉及类似的系统具有借鉴意义。
这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!