部署准备
本次部署采用 ansible,以及 CDH (cloudera hadoop)。由于作为例子,仅展示最小化的集群部署( 六个节点 )。
详细部署方式可以参考官方文档。点击这里
角色分配
cdh-01: nn, rm, hmaster
cdh-02: nn, rm, hmaster
cdh-03: dn, nm, zk, jn, rs
cdh-04: dn, nm, zk, jn, rs
cdh-05: dn, nm, zk, jn, rs
cdh-client: hive, spark, hue, jhs-httpfs, hbase-thriftserver, mysql
( -- 我感觉读这篇文章的你肯定能猜到上面的缩写是什么呢。 )
部署细节
我使用 ansible 部署这套 cdh 集群的时候,遇到的难题主要是如何令到整个部署过程更加顺滑。
这里面其实就是 ansible 的使用哲学,主机组的定义以及 role 的编排。
这里面我目前想到的是两种编写 ansible 脚本的方式。
- 一种是一个组件一个 role 一个对应的主机组。比如,hdfs 这一个组件写成一个 role,主机组里面写 hdfs 需要的全部主机,然后 role 里面的 task 就需要写得比较复杂一点,因为不同主机安装不同的包和下发不同的配置文件。
- 另一种是以主机角色区分 role,主机组也是以主机角色进行编排。比如,前面两台机 cdh-0[1,2] 我定义在了 hadoop-master 和 hbase-master 的组里面,cdh-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 来进行加密
安装脚本
LEUNGUU/ansible-cdhgithub.com欢迎批评指正,谢谢!