1. 安装CDH的准备工作(所有节点都要执行)
1.1 准备环境
|----------------|-----------------|
| 角色 | IP |
| k8s-master | 192.168.181.129 |
| k8s-node1 | 192.168.181.130 |
| k8s-node2 | 192.168.181.131 |
1.2 安装JDK
# https://www.oracle.com/java/technologies/downloads/#java11
wget
rpm -ivh jdk-11.0.21_linux-x64_bin.rpm
$. vi /etc/profile
JAVA_HOME=/usr/java/jdk-11/
CLASSPATH=.:$JAVA_HOME/lib/jrt-fs.jar
PATH=$JAVA_HOME/bin:$HOME/bin:$HOME/.local/bin:$PATH
1.3 更改主机名和hosts
# 更改3台主机hostname,每个主机上按ip递增的顺序,分别执行下面一条命令:
# echo "bigdata01.dpcg.com" > /etc/hostname
# echo "bigdata02.dpcg.com" > /etc/hostname
# echo "bigdata03.dpcg.com" > /etc/hostname
# ===================================================== #
# 在3台机器中分别执行如下命令:
# echo "10.101.15.229 bigdata01.dpcg.com bigdata01" >> /etc/hosts
# echo "10.101.15.230 bigdata02.dpcg.com bigdata02" >> /etc/hosts
# echo "10.101.15.231 bigdata03.dpcg.com bigdata03" >> /etc/hosts
# use
cat >> /etc/hosts << EOF
192.168.31.52 cdh-master-52 cdh-master-52.com
192.168.31.53 cdh-node1-53 cdh-node1-53.com
192.168.31.54 cdh-node2-54 cdh-node2-54.com
192.168.31.55 cdh-node3-55 cdh-node3-55.com
EOF
1.4 关闭防火墙
并重启服务器使hostname和selinux的配置生效
$. systemctl stop firewalld
$. systemctl disable firewalld
$. systemctl status firewalld
$. sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
$. getenforce
$. sestatus -v
1.5 安装NTP服务
#在所有节点
$. yum -y install ntp
# 在master节点,注释掉原有的server指向把时间服务器的域名地址指向一个靠谱可连的时间服务器,
# 我选择的是ntp.api.bz.
$. vi /etc/ntp.conf
......
# 添加修改上层时间服务器,如果能联通外网,则不需要修改
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
# server ntp.api.gz iburst
......
# 在其余的节点上,把时间服务器的server指向master namenode节点
$. vi /etc/ntp.conf
......
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 172.17.28.1 iburst
......
# 在所有节点
systemctl enable ntpd --now
systemctl status ntpd
systemctl start ntpd
systemctl restart ntpd
#查询上级服务时间
[root@localhost etc]# ntpq -p
#查看时间同步状态
[root@localhost etc]# ntpstat
1.6 关闭透明大页
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >> /etc/rc.local
1.7 磁盘写进fstab
lsblk -f | egrep '\/[a-z]+' | awk '{print "UUID="$(NF-1)"\t"$NF"\t"$(NF-2)"\t""defaults,noatime""\t""0 0"}'| sort -k2 >> /etc/fstab
1.8 其它调优
1. 设置最大可大开文件数
* soft nofile 10240
* hard nofile 10240
* soft nproc 65565
* hard nproc 65565
2. TCP连接优化
# 查看连接数(一般默认1024)
netstat -an|wc -l
# 查看连接数范围
cat /proc/sys/net/ipv4/ip_local_port_range
# 打开 vi /etc/sysctl.conf 文件后在文件末尾加上如下配置:
$. vi /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
# 端口范围
net.ipv4.ip_local_port_range = 1024 65000
或者执行:
echo net.ipv4.ip_local_port_range = 1024 65000 >> /etc/sysctl.conf
echo "net.ipv4.ip_forward=1" >>/etc/sysctl.conf
# 验证, 输入命令:
sysctl net.ipv4.ip_forward, 返回为1即可
# 通过命令行设置:
sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
# 执行生效即可
sysctl -p
# ============================================================ #
# 永久关闭Swap步骤:
1. swapoff -a # 临时关闭
2. 永久关闭
编辑/etc/fstab文件, 使用文本编辑器打开该文件:
vi /etc/fstab
在文件中找到含有swap的行, 并在行首添加#注释符, 以将其注释掉。例如:
# /dev/mapper/centos-swap swap swap defaults 0 0
或者是
# UUID=<swap分区的UUID> none swap sw 0 0
保存并关闭文件。
重新启动系统。
reboot
3. 执行以下命令来验证Swap是否已经被禁用:
free -h
现在, Swap已经被永久关闭了。
2. CDH版本选择
old:
CDH版本选择:建议5.4.8和5.8.0版本,如需要版本较高可以选择5.12版本,目前6.x版本还没有使用过,请注意,千万不要选择5.11.0版本。
这里选择最新版本6.3.2。
在CDH5版本中,JDK一般安装为JDK8,还需要安装python环境,可以选择python2.6.X或者python2.7.x都可以。now:
最新版本为:Index of cm6/6.3.1/redhat7/yum/RPMS/x86_64/
https://www.cloudera.com/downloads.html
3. CDH的安装方式选择
方式一: rpm包安装:
- 先离线下载rpm文件,再进行安装,安装过程中会下载相应的依赖,比较稳定,但安装要求较高。
- 此安装方式开始配置时较麻烦,但之后安装很方便,建议使用,具体安装方式请参考上述相关文章链接中的第五章CDH的安装和部署。
方式二: bin文件安装:
- 通过bin文件安装一般用于在线安装,对网络要求比较高,如果现在过程中网络中断会造成安装失败,但此方法安装简单,全程傻瓜式安装。
- bin文件安装参考网址:https://www.cnblogs.com/ljy2013/p/4662191.html https://www.cnblogs.com/leocook/p/cdh_management.html
- 此方法为去http://archive.cloudera.com/cm5/installer/latest/cloudera-manager-installer.bin 中下载bin文件,再执行bin文件进行安装。
方式三: tar包安装
不是很了解tar包的安装方式,但使用tar包安装会有依赖未安装而造成安装失败的异常,不建议使用。
4. CDH的下载
4.1. cm的tar包下载
cm6.3.1下载地址:https://archive.cloudera.com/cm6/6.3.1/repo-as-tarball/
下载allkeys.asc文件:
4.2. parcels包下载
cdh6.3.2下载地址:https://archive.cloudera.com/cdh6/6.3.2/parcels/
请选择对应的版本,el7,并将后缀.sha1更改为.sha。
5. 配置CDH的离线安装
目的:将上述下载的4个文件上传到centos7服务器中,并配置好离线服务,安装时即可以从该离线服务中下载,不需要再从官网中去下载,防止网络错误。
5.1 在master节点上安装httpd
# 查看该centos7是否存在httpd服务
rpm -qa|grep httpd
# 如果不存在该服务就安装
yum install -y httpd
# 启动该服务
systemctl start httpd.service #启动
systemctl stop httpd.service #停止
systemctl restart httpd.service #重启
# 设置该服务是否开机启动
systemctl enable httpd.service #开机启动
systemctl disable httpd.service #开机不启动
# 查看该服务的状态
systemctl status httpd.service
当访问该服务器的80端口出现如下画面即为安装和启动成功
5.2 创建 parcels文件
# 在/var/www/html下创建一个parcels文件夹,并将上述下载的3个文件上传到该目录下
cd /var/www/html/
mkdir cdh6.3.2/parcels -p
# 上传如下3个文件
CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
manifest.json
# 校验文件下载未损坏
/usr/bin/sha1sum CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
cat CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
如果2个验证码一样,证明该文件未损坏,可以使用:
在浏览器中能打开如下网址,证明配置成功:
http://10.101.15.229/cdh6.3.2/parcels/
5.3 创建cm文件
# 在/var/www/html创建cm5/redhat/7/x86_64/文件夹(和官网一样的路径)
cd /var/www/html/
mkdir -p cm6/redhat/7/x86_64/cm
# 上传cm6.3.1-redhat7.tar.gz包到/var/www/html目录下,并解压
tar -xf cm6.3.1-redhat7.tar.gz
mv cm6.3.1 6.3.1
# 将解压好的文件夹移动到上述创建的文件夹下
mv 6.3.1 /var/www/html/cm6/redhat/7/x86_64/cm
!上传allkeys.asc文件到/var/www/html/cm6/redhat/7/x86_64/cm/6.3.1 文件夹下
# 配置本地的yum源,cdh集群在安装时会就从本地down包,不会从官网了,
# 注意: 所有节点都要执行!!!
vim /etc/yum.repos.d/cloudera-manager.repo
#在该文件下插入如下数据
[cloudera-manager]
name=Cloudera Manager
baseurl= http://10.101.15.229/cm6/redhat/7/x86_64/cm/6.3.1/
gpgkey = http://10.101.15.229/cm6/redhat/7/x86_64/cm/6.3.1/RPM-GPG-KEY-cloudera
gpgcheck = 1
在浏览器中出现如下界面:
http://10.101.15.229/cm6/redhat/7/x86_64/cm/6.3.1/
5.4 安装CM的server+agent
# 进入上述创建的CM的文件目录下
# cd /var/www/html/cm5/redhat/7/x86_64/cm/5.7.0/RPMS/x86_64/
cd /var/www/html/cm6/redhat/7/x86_64/cm/6.3.1/RPMS/x86_64/
# 安装cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm
yum install cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm
# 安装cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm,
# 请注意,不用安装db版本的,那是使用默认数据库的,在生产环境中一般不使用,
# 生产环境中是使用MySQL数据库的
yum -y install cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm
5.5 配置Postgresql数据库
在master节点上安装postgre数据库,安装过程参考: centos7系统下postgresql11离线安装,卸载
数据库安装完成后,创建名称为cdh的数据库实例。
修改 /etc/cloudera-scm-server/db.properties 内容如下:
com.cloudera.cmf.db.type=postgresql
com.cloudera.cmf.db.host=10.101.15.229:5432
com.cloudera.cmf.db.name=cdh
com.cloudera.cmf.db.user=postgres
com.cloudera.cmf.db.password=123456
#com.cloudera.cmf.db.setupType=EXTERNAL
#注意:最后一行要注释掉,否则会报INVALID value is specified for db.setupType的异常
5.6 启动cloudera-scm-server服务并查看日志
#启动
service cloudera-scm-server start
service cloudera-scm-server status
service cloudera-scm-server restart
# 在启动时有可能碰到The server time zone value 'EDT' is unrecognized异常,
# 这是mysql的时区和系统的时区不匹配,可以参考如下网站解决
https://blog.csdn.net/u010003835/article/details/88974898
#查看日志
cd /var/log/cloudera-scm-server/
tail -f cloudera-scm-server.log
# 出现如下7180即证明启动成功
WebServerImpl:org.mortbay.log: Started SelectChannelConnector@0.0.0.0:7180
成功图片如下所示:
此时查看Postgre数据库,会发现cmf数据库下回自动创建表:
5.7 在浏览器的web页面上安装CM
当service cloudera-scm-server start启动成功后,即可以在浏览器上服务7180端口(需开放防火墙)。
登录CM的web界面
在浏览器中输入http://10.101.15.229:7180/cmf/login ,登录CM的web界面,账号和密码均为admin:
点击同意许可:
点击继续:
选择CM的版本:
欢迎页面,点击继续:
设置集群名称:
使用搜索模式,搜索需要安装CDH的主机:
5.8 在浏览器的web页面上安装CDH集群
选择存储库
点击更多选项,将其他远程Parcel删除,并输入先前配置好的Parcel:
http://10.101.15.229/cm6/redhat/7/x86_64/cm/6.3.1/
http://10.101.15.229/cdh6.3.2/parcels/
是否需要安装JDK
默认不进行安装,直接下一步:
提供 SSH 登录凭据
提供 SSH 登录凭据,可以自由选择,这里直接使用root用户:
点击继续
安装选定Parcel
先前配置的Parcel就作用于此处,如果不进行此配置会去官网进行下载,对网络要求很高,并网络中断后会重新下载,较麻烦,使用此配置可以直接下载成功,并速度很快:
完成安装
5.8 集群设置
5.8.1 选择服务
5.8.2 自定义角色分配
自定义角色分配,一般将主色分配到master节点,所以该节点内存要大,zookeeper需要安装奇数台,这里是只安装了一台,不合理,请安装3台以上的奇数台:
5.8.3 数据库设置
进行数据库设置,这里使用Postgre数据库:
5.8.4 审核更改
此步骤中不管是开发测试还是生产环境,均不需要更改,直接点击继续,进行下一步:
5.8.5 审核更改
首次运行,会自动运行,运行之后点击继续按钮即可:
6. 安装成功:
此状态为主机配置较低,运行不良,对集群无影响,可以正常工作。
7. 安装kerberos(选装)
(一般人不需要安这个玩意儿,到此cdh安装就结束了)
# 安装kerberos,注意要安装1.15.1-50.el7版本左右的,不能太低,不然CDH开启kerberos报错
# kerberos 1.15.1-50.el7版本在CentOS-7-x86_64-DVD-2009.iso镜像的yum源里就有
# 选择一个节点安装kerberos服务端
yum -y install krb5-server openldap-clients
# 所有节点安装客户端及相关库
yum install -y krb5-workstation krb5-libs
# 所有节点修改krb5.conf
sudo vi /etc/krb5.conf
# krb5.conf示例内容如下:
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
default_realm = kunlun.test
# default_ccache_name = KEYRING:persistent:%{uid}
[realms]
kunlun.test = {
kdc = bjzj1-vbig-tmp02
admin_server = bjzj1-vbig-tmp02
}
[domain_realm]
.bjzj1-vbig-tmp02 = kunlun.test
bjzj1-vbig-tmp02 = kunlun.test
# kerberos服务节点修改kdc.conf
sudo vi /var/kerberos/krb5kdc/kdc.conf
# kdc.conf示例内容如下:
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
kunlun.test = {
#master_key_type = aes256-cts
max_renewable_life = 7d 0h 0m 0s
default_principal_flags = +renewable
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}
max_life = 24h
# kerberos服务节点修改kadm5.acl
sudo vi /var/kerberos/krb5kdc/kadm5.acl
# kadm5.acl示例内容如下:
*/admin@kunlun.test *
#创建数据库
kdb5_util create -r kunlun.test -s
# 开启kdc、kadmin服务
sudo systemctl start krb5kdc
sudo systemctl start kadmin
systemctl enable krb5kdc
systemctl enable kadmin
# 创建管理员账户,用于CDH开启kerberos时自动创建principal
kadmin.local:
addprinc admin/admin
# 记得创建完后测试下该用户