部署准备
本次部署采用ansible,以及CDH(cloudera hadoop)。由于作为例子,仅展示最小化的集群部署(六个节点)。详细部署方式可以参考官方文档。 点击这里
角色分配
cdh-test-01: nn, rm, hmaster |
注:我感觉读这篇文章的你肯定能猜到上面的缩写是什么呢。😏
部署细节
我使用ansible部署这套cdh集群的时候,遇到的难题主要是如何令到整个部署过程更加顺滑。这里面其实就是ansible的使用哲学,主机组的定义以及role的编排。这里面我目前想到的是两种编写ansible脚本的方式。
一种是一个组件一个role一个对应的主机组,比如,hdfs这一个组件写成一个role,主机组里面写hdfs需要的全部主机,然后role里面的task就需要写得比较复杂一点,因为不同主机安装不同的包和下发不同的配置文件;另一种是以主机角色区分role,主机组也是以主机角色进行编排。比如,前面两台机cdh-test-0[1,2]我定义在了hadoop-master和hbase-master的组里面,cdh-test-0[3,4,5]我定义在了hadoop-slave和hbase-slave的组里面,分别对应不同的role,role里面的task就可以写得比较简单,只需要关注某一个角色的安装包和配置文件即可。同时,每个组的配置文件所需要的变量都配置在该组的group_vars里面,这样做可以令到部署的条理较为清晰,便于日后维护。
除了以上还需要记录几点:
- 使用了kerberos提高集群的安全性,访问数据以及提交任务都需要使用对应用户的keytab,需搭建krb认证服务和dns服务,生成用户keytab和服务keytab
- hive的metastore使用的是remote方式,暂时将mysql装在client节点上,是单节点,生产环境需要搭建主从可切换
- 集群的底层资源控制使用的是cgroup,cgroup可以更好地将主机资源进行有效分配,任务层面的资源调度使用的是fair-scheduler
- 配置文件里面涉及到帐号密码等敏感信息建议使用ansible-valut来进行加密
安装脚本
https://github.com/LEUNGUU/ansible-cdh
欢迎批评指正,谢谢!😄