cdh 架构图
根据官方文档选定linux系统版本所支持的CDH 版本 cloudera-manager-6.0.1
查看当前机器的信息
查看linux版本,例如:
cat /etc/redhat-release
centos Linux release 7.5.1804
查看机器型号
dmesg | grep -i virtual,例如查询到是kvm 虚拟机
查看cpu和内存使用情况Top
磁盘使用率 df -h
机器分配
根据机器配置情况,支持安装CDH6.0 集群
创建yum源
下载yum源
wget https://archive.cloudera.com/cm6/6.0.0/redhat7/yum/cloudera-manager.repo -P /etc/yum.repos.d/
如下图,可以选择指定版本的yum源
导入GPG key
rpm --import https://archive.cloudera.com/cm6/6.0.0/redhat7/yum/RPM-GPG-KEY-cloudera
修改yum 缓存配置
vim /etc/yum.conf
设置keepcache=1,表示rpm 包在本地长期保存,这样的好处是一个节点下载好了后,其他节点可以从此节点上拷贝,不用重复下载。
修改hosts
修改每台机器的hostname
cat /etc/hostname查看hostname
hostname master临时修改hostname
vim /etc/hostname永久修改hostname
修改所有机器的host(所有机器执行)
所有机器的hostname中都需要设置到每台机器的host中
如果一台机器的ip 有多个host ,host 需放到一行,否则后面搭建集群前的环境校验会异常。如
192.168.52.52master name1 name2 name3
关闭防火墙
systemctl status firewalld查看防火墙状态
systemctl stop firewalld关闭防火墙(所有机器执行)
systemctl disable firewalld禁止开机启动防火墙(所有机器执行)
配置ssh 免密登录
a. 生成秘钥:ssh-keygen -t rsa
b. 复制公钥到远程机:ssh-keygen -t rsa
注意:
某些集群组件中的主节点需要远程维护数据节点的状态,因此需要远程免密登录。比如,启动 Hadoop 集群的start-all.sh ,过程中会ssh 到datanode 启动相应的服务。由于有的机器上可能不只是安装数据(计算)角色,可能也会存在master 服务调用角色,因此为避免麻烦集群机器之间都设置成免密登录(对于主机少的情况可以这样做,至于主机多的情况需要根据需求进行免密配置)。
在所有主机上以此执行a—>b 步骤
安装NTP时间同步器(所有机器执行)
yum install -y ntp
修改配置文件
vim /etc/ntp.conf
将此处的server 设置主节点的地址
例如:
server master iburst
注意:
实际操作时,设置成server master iburst 后CM minitor service monitor 一直提示NTP无法连接远程服务器,好吧索性不改了,就使用默认的0.centos.pool.ntp.org
安装nfs网络文件系统
Nfs文件系统相当于机器之间的共享目录,避免机器之间通过scp 转移文件繁琐。
比如,后续会用到的MySQL-connector-JAVA.jar 共享文件就可以放在这里。
服务端:(任意一台机器)
安装nfs
yum -y install nfs-utils rpcbind
创建共享目录,并且授权:
mkdir /opt/share
chmod -R 666 /opt/share
修改配置:
/opt/share *(rw,no_root_squash,no_all_squash,sync)
exportfs -r 使配置生效
启动服务:
systemctl start nfs
systemctl start rpcbind
客户端
安装nfs:
yum -y install nfs-utils rpcbind
创建挂载点:
mkdir /opt/share
挂载:
showmount -e master//查看nfs文件系统服务端的挂路径
mount -t nfs master:/opt/share /opt/share -o proto=tcp -o nolock(挂载)
CDH 安装过程中检测系统环境时默认会读取/usr/java下的jdk路径,也可以通过CDM 在主机下配置
mkdir -p /usr/java
jdk-8u141-linux-x64.rpm上传
rpm -ivh jdk-8u141-linux-x64.rpm安装
vim /etc/profile设置环境变量
source /etc/profile
修改swapiness 和huge page(所有机器执行)
huge page
Hadoop是个高密集型内存运算系统,Cloudera官方关闭THP
参考文档:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
swAppiness
swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。两个极端,对于ubuntu的默认设置,这个值等于60,建议修改为10
cat /proc/sys/vm/swappiness查看swapiness
sysctl vm.swappiness=10临时设置
vim /etc/sysctl.conf永久修改,重启后生效
vm.swappiness=10
安装mysql
Cloudera-Manager安装cdh时,通默认使用内嵌的PostgreSQL数据库,更多应用场景下使用的是mysql
rpm -qa|grep mysql
yum install mysql
systemctl start mysql启动
systemctl enable mysql设为开机启动
创建scm、hive、hue、oozie、monitor数据库(集群搭建前期只要创建cloudera manager基础数据库scm就行,也可后期根据需要安装的插件再创建对应的元数据库)
CREATE DATABASE `scm` /*!40100 DEFAULT CHARACTER SET utf8 */
CREATE DATABASE `hue` /*!40100 DEFAULT CHARACTER SET utf8 */
CREATE DATABASE `oozie` /*!40100 DEFAULT CHARACTER SET utf8 */
CREATE DATABASE `monitor` /*!40100 DEFAULT CHARACTER SET utf8 */
CREATE DATABASE `hive` /*!40100 DEFAULT CHARACTER SET utf8 */
下载mysql-connector-java.jar并拷贝到/usr/share/java 目录(所有机器上执行)
创建用户
create user scm@"%" identified by "scm"创建scm用户
grant all on *.* to scm@"scm" identified by "scm"授权
flush privileges刷新权限
systemctl restart mysql重启
主节点
yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
(当前机器上已经安装,所以显示的是installed)
===================== 等待安装 ====================
其他节点
安装完成后将
/var/cache/yum/x86_64/7/cloudera-manager/packages 下的缓存的daemons 和agent rpm 包拷贝到其他节点 /var/cache/yum/x86_64/7/cloudera-manager/packages
执行安装(除主节点外所有机器)
yum install cloudera-manager-daemons cloudera-manager-agent
配置CM Server(除主节点外所有机器)
vim /etc/cloudera-scm-agent/config.ini
修改此处的server_host为CMmaster 地址
数据库和CM在一台机器上
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm scm
数据库和CM不在一台机器上
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h dbhost --scm-host master scm scm scm
(后面scm分别是数据库名 用户名 密码)
初始化成功后如下图(借网上截图)
启动CM server和CM agent
cloudera-scm-server
systemctl start cloudera-scm-server
查看启动日志
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
CM 服务使用的是jetty 部署,看到日志正常jetty server 启动成功表示server服务启动ok
cloudera-scm-agent(注意主节点上也安装了agent 所以也需要启动)
systemctl start cloudera-scm-agent
服务启动OK后可以登录管理后台账户/密码:admin/admin
安装 进入CM 后台后开始安装集群
这里会检测到每个agent 机器
此处CM server 会下载CDH parcel 包,并且分发到其他agent 节点并解压安装(借别人图示例,实际上搭建的是3个节点)
注意:
将离线的parcels包、sha和torrent文件拷贝到parcel-repo 路径下,重启server
选择安装的服务,这里选择自定义
分配角色
给组件分配对应的元数据库
确认服务配置
启动
角色分布概览
问题
由于后台进程是由supervisor 管理,当手动kill掉进程后,supervisor 会将其重启。
例如,CDH 集群和CM 都停止服务后,9000 端口仍然会被占用,是因为supervisor 管理的进程没有被kill,systemctl status supervisord
环境搭建结束
至此,CDH 集群搭建完成。集群中不只是hadoop 集群,还包含其他组件集群,例如hbase集群、spark 集群和其他客户端组件,包括hive/impala/hue 等。
通过CM 管理的集群,CM service让我们可以更加直观的了解到个各个主机的运行状况,以及各个组件的健康状态,管理起来更加方便。
整个CDH 集群涉及到的内容知识很多且复杂,环境搭建好了接下来就是慢慢求索,不断整个业务,不断学习知识体系,不断进步吧。