使用ambari快速构建Hadoop集群

引言

Cloudera和Hortonworks算是最著名的两个做Hadoop产品发行版的公司了,之前在坐一个监控系统的时候,需要一个时序数据库去存放监控的时许数据,最后选择了opentsdb,因为opentsdb是一个基于HBase构建的数据库,所以,为了部署一个opentsdb集群,就不得不先部署一个HBase集群,当时为了和部门统一,使用了cdh发行版去安装,当时,是根据Cloudera官网都文档step by step一点点部署起来(我并没有选择免费版的cloudera manager),可谓是极其耗时,因为不熟悉,我需要一步步敲命令,确认每一步的结果,如果遇到问题,还还要花时间却Google解决办法。

Hadoop生态中的组建实在是太多了, zookeeper、Hadoop core、HBase、Yarn、Strom、Spark…, 如果有个管理控制台让我只要点点点就可以创建一个集群,并按自己需求管理组建就好了。当然了,这个肯定是有的,付费的自然也是很多的,比如华为的FusionCloud,cloudera的付费版cloudera manager, 说起免费的,被提到次数最多的就是Hortonworks的ambari和 Cloudera的cdh manager了,最近部门同事在基于ambari做二次开发,我也顺手去学习了一下,虽然现在hortonworks和Cloudera合并了,但是毕竟ambari相对于cdh, 是一个完全开源的Apache顶级项目,还是值得使用的。

维基百科上看到的关于ambari项目的说明:

Apache Ambari is a software project of the Apache Software Foundation. Ambari enables system administrators to provision, manage and monitor a Hadoop cluster, and also to integrate Hadoop with the existing enterprise infrastructure. Ambari was a sub-project of Hadoop but is now a top-level project in its own right.
Ambari is used by companies including IBM, Hortonworks, Cardinal Health, EBay, Expedia, Kayak.com, Lending club, Neustar, Pandora Radio, Samsung, Shutterfly, and Spotify.

部署踩坑

分布式系统实践的一大障碍就是,往往需要3+台机器去完成部署测试,而目前我手头上我没有那么多机器,所以首先想到的是docker, 我想在我的mac上启动3个centos7的容器来进行我的测试,实践证明,这是一个苦涩的体验,建议有条件的小伙伴,还是乖乖地搞几个虚拟机或者云主机去实验吧。(写这个总结都时候,距离我实验已经过去一个月了,里面很多坑由于疏于记录,已经忘记了😭)

  1. “docker Failed to get D-Bus connection”报错
    在容器中安装启动httpd,postgresql,sshd的时候,可能会启动报错,这个在stackoverflow查到不少解决方案,参考,我是使用如下方式解决的这个问题:
    1
    2
    # 容器启动时,带上--privileged参数, 并指明启动脚本/usr/lib/systemd/systemd --system &
    docker run --name httpd -p 8080:80 -itd --privileged centos /usr/lib/systemd/systemd --system &

2.解决https报错问题(certificate verify failed):
yum install openssl
vim /etc/python/cert-verification.cfg (set verify to disable)

3.解决远程访问问题:
yum -y install openssh-server
systemctl start sshd.service

4.解决host验证失败问题:
vim /etc/ambari-agent/conf/ambari-agent.ini
security下增加:force_https_protocol=PROTOCOL_TLSv1_2

5.ambari默认的postgresql数据库无法初始化问题
容器下的数据库需要我们自己去做初始化,可以用常见的mysql或者postgresql来做,基本流程是数据库服务启动,创建用户和数据库,然后做用户授权,最后使用初始化sql脚步进行数据初始化,手动初始化Postgres 参考ambari官方文档(注意,必须要先修改pg_hba的配置,保证psql -U ambari -d ambari能够正常登录,后续脚本导入需要导入到ambari 这个schema下)

经过一些列的折腾,终于在docker下把ambari安装完成,可以从web ui开始Hadoop组件安装了,但奈何我的机器只有8g内存,已经扛不住这样折腾的,最后,还是使用公司的测试账号,在我们的控制台上申请了祭台云主机进行测试。经过之前的踩坑,这次的测试已经顺畅了很多,其实也是依靠别人的参考文档,这里主要参考了官方文档和一个知乎的文。
1.官方文档,可以根据自己的需要选择合理的版本,这里用较老的ambari-2.5进行测试
2.知乎文档

页面功能展示

登录页:

dashboard:

服务列表:

主机节点信息:

组件版本信息: