概要
本文在Centos7系统上安装CDH5.15.1,从安装系统到搭建集群,采用完全离线安装的方式,小白们可以参考。安装过程中查阅了不少前人的经验,同时也遇到了很多大坑,也记录在此,共同学习。
基础环境
硬件类型 Oracle Virtual Box搭建的三台虚拟机
内存 master 6G worker 4G
硬盘 80G
网络 网卡使用桥接模式
IP规划192.168.1.121 master121
192.168.1.122 worker122
192.168.1.123 worker123
安装步骤
一. 安装操作系统
操作系统选用centos7版本,使用CentOS-7-x86_64-Everything-1804包
下载地址https://www.centos.org/download/
安装时选择最小软件安装即可,后续有缺失的组件自行yum
安装系统过程中可以配置主机名 网络IP和root密码等
二.配置网络
1. 设置主机名
hostnamectl set-hostname master121
设置完成后用hostname命令查看是否已生效
2. 如果安装系统时未配置网络,可以在安装结束后手工配置
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
3. 修改文件内容
#修改 BOOTPROTO=static #这里讲dhcp换成ststic ONBOOT=yes #将no换成yes #新增 IPADDR=192.168.85.100 #静态IP GATEWAY=192.168.85.2 #默认网关 NETMASK=255.255.255.0 #子网掩码
4. 完成后重启网络服务
service network restart
5. 查看IP配置是否生效
ifconfig -a
也可以ping一下宿主机IP看是否连通
三. 相关配置
1. 关闭selinux
# 临时关闭
setenforce 0
# 永久关闭(重启生效)
# /etc/sysconfig/selinux是/etc/selinux/config的一个软链接
sed -i s@enforcing@disabled@g /etc/selinux/config
# 确认关闭
/usr/sbin/sestatus -v
2. 关闭防火墙
# 停止firewall
systemctl stop firewalld.service
# 禁止firewall开机启动
systemctl disable firewalld.service
# 确认关闭
firewall-cmd --state
3.内核参数优化
# for runtime effect
sysctl vm.swappiness=1
# for permanent effect
echo vm.swappiness=1 >> /etc/sysctl.conf
# check
cat /proc/sys/vm/swappiness
4. 修改transparent_hugepage参数
这一参数默认值可能会导致CDH性能下降,执行以下命令
# 临时关闭
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 永久关闭
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/defrag" >> /etc/rc.local
# 确认关闭
grep -i HugePages_Total /proc/meminfo 确认是否为0
cat /proc/sys/vm/nr_hugepages 确认是否为0
sysctl vm.nr_hugepages 确认是否为0
四. 配置jdk
1. 下载jdk-8u191-linux-x64.tar.gz
下载地址 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2. 将压缩包放到master121的/usr/java目录,并解压缩
(大坑:理论上jdk放在任何目录都可以,但是后面cdh安装时居然只认/usr/java目录,所以就放在这个目录吧,一劳永逸)
3. 配置环境变量
vii /etc/profile 在文件末尾加上这几行
export JAVA_HOME=/usr/java/jdk1.8.0_191 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
srouce /etc/profile 生效
以上步骤在每台机器上都要完成,虚拟机安装,可以到此做个镜像复制出另外几个节点。
五. 配置集群ssh免密登录
1. 各节点机器上都执行以下命令生成密钥
cd
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
2. 在worker122和worker123上分别执行
cat .ssh/id_rsa.pub >>id_rsa1.pub #worker123上可以为id_rsa2.pub
scp id_rsa1.pub root@master121:~/.ssh/
3.将其他节点的密钥内容放入master121的authorized_keys,然后将此文件发送到其他节点
在master121上执行
cat id_rsa1.pub >>authorized_keys
cat id_rsa2.pub >>authorized_keys
scp authorized_keys root@worker122:~/.ssh
scp authorized_keys root@worker123:~/.ssh
4.测试各节点之间ssh免密互通
六.配置安装源
1. 搭建apache服务器
服务器如果能联网可以直接yum install httpd,如果不能联网,可采用编译方式安装,比较麻烦,
或者也可以先搭建本机yum源,方法是将centos everything包先挂在在本机某个目录,然后/etc/yum.repo.d/中增加repo文件,具体可以参考下面http方式的搭建,方法类似,在此不再详细介绍。
安装完httpd后,启动服务 systemctl start httpd
可以在宿主机打开浏览器输入 http://服务器IP 如果出现TESTING123表明apache服务已开启
2.搭建centos linux http yum源
搭建本地yum源,原因是我们在安装操作系统时选择了最小软件安装模式,因此在后续安装CDH的过程中难免会缺少必要的软件包,针对每个软件包去下载安装较为麻烦,使用yum install就比较方便,而企业生产环境一般都无法连接互联网,因此搭建局域网内的http yum源很有必要。
搭建步骤如下:
将centos everything包挂载到任意一个服务器节点,将里面的文件拷贝到/var/www/html/localos目录,确保浏览器打开http://192.168.1.121/localos能够看到目录结构(其中包含Packages repodata 等目录)
在master121上建立localos.repo文件
vi /etc/yum.repo.d/localos.repo
输入以下内容:
[localos]
name=CentOS-$releasever - http
baseurl=http://192.168.1.121/localos/
gpgcheck=0
enabled=1
保存文件后执行,以下命令在各节点上都要执行
yum clean all
yum makecache
yum update
http yum源配置完成,此时可以测试yum install vim,如果能安装即为配置正确。
3.配置CDH源
下咱CM安装包
http://archive.cloudera.com/cm5/repo-as-tarball/
下载cdh parcel包
http://archive.cloudera.com/cdh5/parcels/
解压到任一台上述yum机器的/var/www.html下的cm和parcel/cdh目录,目录结构示意如下:
确认使用http://192.168.1.121/parcels/cdh 和http://192.168.1.121/cm可以正常访问到安装包
在worker121的 /etc/yum.repos.d/文件夹下创建repo文件,如local-cloudera-manager.repo,内容如下
[local-cloudera-manager]
baseurl = http://172.18.8.101/cm/5
enabled = 1
gpgcheck = 0
name = Local Cloudera Manager
更新yum源,方法同上述localos源的更新
六.安装mysql
1.下载MySQL5.7 tar.gz包
下载地址https://dev.mysql.com/downloads/mysql/5.7.html#downloads
安装包放在master121的/usr/local,解压缩,重命名目录
tar zxvf mysql-5.7.24-el7-x86_64.tar.gz
rm -rf mysql-5.7.24-el7-x86_64.tar.gz
mv mysql-5.7.24-el7-x86_64 mysql
2. 卸载CentOS自带的mariadb数据库,并检查是否有其他mysql数据库
rpm -qa|grep mariadb #查看本机是否安装mariadb
rpm -qa | grep mysql #查看本机是否已安装mysql rpm -e --nodeps mariadb-libs #卸载自带的mariadb
rm /etc/my.cnf 删除已有的my.cnf配置文件
3. 安装前的配置
(1)创建用户
创建组 groupadd mysql
创建用户useradd -g mysql mysql
修改密码 passwd mysql
(2) 配置目录权限,并新建数据目录
cd /usr/local
chown -R mysql mysql/
chgrp -R mysql mysql/
cd mysql
mkdir data
chown -R mysql:mysql data
(3)在/etc/目录新建配置文件my.cnf,内容参考如下:
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
skip-name-resolve
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
4.初始化数据库
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize
坑1:很多教程上用的是mysql_install_db命令,mysql5.7版本不支持mysql_install_db命令,会报错
坑2:如果提示错误error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory,是因为我们系统是最小软件安装,需要yum install libaio
5. 启动数据库
cp ./support-files/mysql.server /etc/init.d/mysqld
chown 777 /etc/my.cnf
chmod +x /etc/init.d/mysqld
/etc/init.d/mysqld start
6.设置开机启动
chkconfig --level 35 mysqld on
chkconfig --list mysqld
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --list mysqld
service mysqld status
7获取初始密码登陆数据库
cat /root/.mysql_secret # Password set for user 'root@master121' at 2018-12-02 17:40:02 _pB*3VZl5T<6 这就是初始密码
用这个密码尝试登录数据库,此时又出现大坑,密码居然登不进去。
解决方案:临时关闭密码登陆,直接重置密码
具体方法:
(1)在/etc/my.cnf的mysqld下面添加skip-grant-tables
(2)重启服务 service mysqld restart
(3)无密码登陆数据库 mysql -uroot
(4)登陆成功后执行sql语句:
update mysql.user set authentication_string=password('123456') where user='root' ;
flush privileges
退出mysql
(5)将/etc/my.cnf的skip-grant-tables删除或注释
(6)重启服务 service mysqld restart
(7)此时再次尝试 mysql -uroot -p123456 登录成功
(8)但是执行任何命令时提示You must reset your password using ALTER USER statement before executing this statement.
执行set password = password('123456');后正常,刚才已经重置了密码,这一步不知道为何又要设置一遍,原因不详。
8. 至此,mysql安装完毕,但是还需要配置远程访问权限
登录mysql后,查看已有用户
select host,user from user
创建一个新用户可以进行远程登录
create user 'root'@'%' identified by '123456'; 这里 @‘%’ 表示在任何主机都可以登录
退出mysql后重启服务
systemctl restart mysql.service
/etc/init.d/mysqld restart
9 安装 mysql connector
下载地址https://dev.mysql.com/downloads/connector/j/
tar zxvf mysql-connector-java-5.1.47.tar.gz
mkdir -p /usr/share/java
cp mysql-connector-java-5.1.47/mysql-connector-java-5.1.47-bin.jar /usr/share/java/
ln -s /usr/share/java/mysql-connector-java-5.1.47-bin.jar /usr/share/java/mysql-connector-java.jar
10.mysql安装完成后,还需要建一些表,以备后面安装CDH时使用
执行以下sql语句
-- on mysql server
-- create database
-- for clousera manager
create database scm DEFAULT CHARACTER SET utf8;
-- for Reports Manager
create database rman DEFAULT CHARACTER SET utf8;
-- for Hive Metastore Server
create database hive DEFAULT CHARACTER SET utf8;
-- for oozie
create database oozie DEFAULT CHARACTER SET utf8;
-- for hue
create database hue DEFAULT CHARACTER SET utf8;
-- for Activity Monitor
create database amon DEFAULT CHARACTER SET utf8;
-- create corresponding user
CREATE USER 'scm'@'localhost' IDENTIFIED BY 'Ab123456';
CREATE USER 'rman'@'localhost' IDENTIFIED BY 'Ab123456';
CREATE USER 'hive'@'localhost' IDENTIFIED BY 'Ab123456';
CREATE USER 'oozie'@'localhost' IDENTIFIED BY 'Ab123456';
CREATE USER 'hue'@'localhost' IDENTIFIED BY 'Ab123456';
CREATE USER 'amon'@'localhost' IDENTIFIED BY 'Ab123456';
-- grant permissions
grant all on scm.* TO 'scm'@'%' IDENTIFIED BY 'Ab123456';
grant all on rman.* TO 'rman'@'%' IDENTIFIED BY 'Ab123456';
grant all on hive.* TO 'hive'@'%' IDENTIFIED BY 'Ab123456';
grant all on oozie.* TO 'oozie'@'%' IDENTIFIED BY 'Ab123456';
grant all on hue.* TO 'hue'@'%' IDENTIFIED BY 'Ab123456';
grant all on amon.* TO 'amon'@'%' IDENTIFIED BY 'Ab123456';
flush privileges;
七. 配置ntp服务
1.所有节点安装ntp
yum install ntp
2.选定一个节点作为NTP服务器,例如master121
修改/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 ntp4.aliyun.com iburst #如果能联网,将与阿里云的ntp服务同步
server 127.127.1.0 iburst #与本机同步
fudge 127.127.1.0 stratum 10
启动ntp服务并设置开机启动
启动前先查看一下当前时间 date,如果与真实时间偏差较大,需手工更改,或与阿里云ntp服务手工同步一次
启动服务:
systemctl start ntpd
systemctl enable ntpd
查看ntp状态 ntpstat
显示synchronised to NTP serverxxx at stratum 即为已启动并开始同步
3.在其他节点上启动ntp服务
修改/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 master121 iburst
与ntp服务器手工同步一次
ntpdate -u master121
启动服务
systemctl start ntpd
systemctl enable ntpd
查看ntp状态 ntpstat
八. 安装Cloudera Manager
1. 安装CM
yum install cloudera-manager-daemons cloudera-manager-server -y
2. 为CM配置外部数据库
/usr/share/cmf/schema/scm_prepare_database.sh -h master01 mysql scm scm Ab123456
以上最后是mysql数据库中scm用户的密码,在安装mysql时已经设置
3.启动 Cloudera Manager服务
chkconfig cloudera-scm-server on
service cloudera-scm-server start
查看服务是否启动
systemctl status cloudera-scm-server
稍等一两分钟后,可以通过http://192.168.1.121:7180端口进入Cloudera Manager管理页面
九. 安装CDH
1. 进入Cloudera Manager登陆界面,输入账户密码,默认密码为admin/admin,点击"登录",建议使用firefox或者chrome,不要使用IE
2. 勾选"End User License Terms and Conditions",点击"继续"
3. 选择要安装的集群版本,点击"继续"
4. 了解CDH支持的Hadoop组件信息,点击"继续"
5. 查找并选择需要安装CDH的机器,点击"继续"
6. 点击"使用Parcels(建议)"右侧的"更多选项"按钮,在弹出框中设置CDH Parcel包的URL,点击"确定":
7. 选择本地的parcel包版本,在"自定义存储库"填写依赖包的URL,点击"继续"。
8. 不安装JDK,点击"继续"
9. 不要勾选单用户模式,点击"继续"
10. 输入集群机器的系统登录密码,点击"继续"
11. 安装集群依赖包,安装完后点击"继续"
这一步很可能会报各种错误,可以对照日志寻找解决方案,一般错误有几种:
(1) 各节点的时间不同步,需要检查各节点的ntp服务和同步情况
(2) 各节点ssh免密不通,需检查ssh免密配置
(3) yum存在依赖问题,需确认yum源是否正常,源文件包有没有问题。
(4) 等等
12. 安装Parcel包,安装完后点击"继续"
13. 检查主机正确性,如果检查出现任何潜在问题,你可以到集群中进行修复,修复后点击"重新运行"重新检查。解决所有问题后,点击"完成"
14. 选择自定义服务,选择要安装的服务套装,点击"继续"
15. 选择具体的角色分配,点击"继续"
16. 设置数据库,设置完毕后点击"测试连接",测试全部通过后点击"继续", 这里的数据库是在上文安装mysql服务步骤中创建的。
17. 配置集群组件的相关参数,确认datanode和namenode的目录,点击"继续"
18. 启动集群,完成后点击"继续"
19. 启动集群后可以在CM管理端查看各服务是否是绿色,如果有红色或黄色,需要看具体的警告或错误提示,各个击破,最终各节点和服务全部变成绿色,集群安装结束。