1、主机准备
这里以三节点为例;
准备三台环境纯净的centos7主机, 要可以正常连接yum源, root用户操作;
随便安装一个包,测试一下yum:
yum -y install lrzsz
主机情况:2核 4G,硬盘40G;这个配置其实太小,单节点内存尽量要给到8G以上比较好;
主机资源看个人情况,我这里是因为我的电脑一共才16G内存,用的VMware虚拟机;
2、更改三台主机的hostname,
这里分别为node1、node2、node3
写入三台主机的/etc/hosts :
192.168.3.31 node1
192.168.3.32 node2
192.168.3.33 node3
3、关闭防火墙、selinux;
4、免密登录
node1可以免密登录到集群的三台台主机上;其实不做也可以;
这里是为了方便操作;而且也可以统一执行命令;
(1)三台节点都执行:
vim /etc/ssh/sshd_config #修改以下两行
PermitRootLogin yes
PubkeyAuthentication yes
systemctl restart sshd #重启sshd
ssh-keygen -t rsa -P "" #三台主机都生成密钥对,一路回车即可
(2)node1执行:
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.3.31
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.3.32
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.3.33
在node1上测试,是否还需要密码:
ssh node1
ssh node2
ssh node3
5、远程执行命令的脚本
此脚本在node1上运行,可同时操作node1 node2 node3;
[root@node1 ~]# cat rcmd.sh
#!/bin/bash
CMD1="$1"
echo -e "\033[34m---------node1-----------\033[0m"
ssh node1 "${CMD1}"
echo -e "\033[34m---------node2-----------\033[0m"
ssh node2 "${CMD1}"
echo -e "\033[34m---------node3-----------\033[0m"
ssh node3 "${CMD1}"
6、主机时钟同步
(1)node1执行:
[root@node1 ~]# sh rcmd.sh "yum -y remove chrony" #这里已经开始使用rcmd.sh脚本批量操作了
[root@node1 ~]# sh rcmd.sh "yum -y install ntp"
vim /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
#添加下面两行,这两行是让node1和node1自己做时间同步
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
(2)node2、node3执行(node2和node3去与node1同步):
vim /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 192.168.3.31
(3)所有主机重启ntp服务并开始时间同步:
[root@node1 ~]# sh rcmd.sh "systemctl restart ntpd"
[root@node1 ~]# sh rcmd.sh "ntpq -p" #执行同步
时间同步说明:这里是自己搭建的测试集群,如果是生产中,应该会有专门的时间服务器,使用之即可;
7、设置swap、设置透明大页,下列echo命令可以写进开机自启动文件
#设置swap
[root@node1 ~]# sh rcmd.sh "echo vm.swappiness = 10 >> /etc/sysctl.conf"
[root@node1 ~]# sh rcmd.sh "sysctl vm.swappiness=10"
#设置透明大页
[root@node1 ~]# sh rcmd.sh "echo never > /sys/kernel/mm/transparent_hugepage/defrag"
[root@node1 ~]# sh rcmd.sh "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
8、所有节点安装依赖
[root@node1 ~]# sh rcmd.sh "yum install -y bind-utils libxslt cyrus-sasl-plain cyrus-sasl-gssapi portmap"
[root@node1 ~]# sh rcmd.sh "yum install -y fuse-libs /lib/lsb/init-functions httpd mod_ssl"
[root@node1 ~]# sh rcmd.sh "yum install -y openssl-devel python-psycopg2 Mysql-python fuse"
9、安装http服务,用于提供CDH的yum源服务
(1)node1执行(我这里选择安装到node1上):
[root@node1 ~]# yum -y install httpd
[root@node1 ~]# systemctl start|stop|restart httpd
[root@node1 ~]# cd /var/www/html
[root@node1 ~]# mkdir -p CDH5.16.2/{CDH,CM5}
把CDH5.16.2目录下的文件全都上传到/var/www/html/CDH5.16.2/CDH/
把CM5.16.2目录下的文件全都上传到/var/www/html/CDH5.16.2/CM5/
#安装createrepo命令,然后进入到CM5目录创建yum源
[root@node1 ~]# yum install -y createrepo
[root@node1 ~]# cd /var/www/html/CDH5.16.2/CM5
[root@node1 ~]# createrepo . #创建yum源的描述meta
配置yum源文件,内容如下:
[root@node1 ~]# cat /etc/yum.repos.d/cloudera-manager.repo
[cloudera-manager]
name = Cloudera Manager, Version 5.16.2
baseurl = http://192.168.3.31/CDH5.16.2/CM5
enabled = 1
gpgcheck = 0
[root@node1 ~]# systemctl start httpd #启动httpd
[root@node1 ~]# yum clean all
[root@node1 ~]# yum repolist #查看可用源
在浏览器中,同样可以查看:
10、node1安装mysql,用于存储一些元数据
说明:这里因为是测试集群,自己安装了mysql,生产中应该会有专门的MySQL来用,最好是高可用的mysql,
(1)#先看一下是否已经安装了mysql或者mariadb
[root@node1 ~]# rpm -qa |grep mysql
[root@node1 ~]# rpm -qa |grep mariadb #发现有一个mariadb包
mariadb-libs-5.5.60-1.el7_5.x86_64
#把mariadb包卸载掉,若有多个,要全部卸载
[root@node1 ~]# rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
#上传mysql包
[root@node1 mysql-pkg]# mkdir /usr/local/src/mysql-pkg && cd /usr/local/src/mysql-pkg
#安装命令
rpm -ivh mysql-community-common-5.7.17-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.17-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.17-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.17-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.17-1.el7.x86_64.rpm
(2)#初始化mysql
[root@node1 mysql-pkg]# mysqld --initialize --user=mysql
#查看mysql初始密码,在文件末尾
tail -n 3 /var/log/mysqld.log
#启动MySQL
systemctl start mysqld
systemctl enable mysqld
echo "systemctl start mysqld" >> /etc/rc.local
#mysql设置
mysql -u root -p
mysql> set password=password('123456'); #进去以后改root密码
mysql> grant all privileges on *.* to root@'%' identified by '123456'; #解决客户端root用户远程连接服务器的问题
mysql> grant all privileges on *.* to 'root'@'node1' identified by '123456' with grant option; #解决root权限访问所有库的问题
mysql> flush privileges;
(3)#创建集群所需要的库,在mysql中创建,SQL如下:
create database metastore default character set utf8;
CREATE USER 'hive'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON metastore. * TO 'hive'@'%';
FLUSH PRIVILEGES;
create database cm default character set utf8;
CREATE USER 'cm'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON cm. * TO 'cm'@'%';
FLUSH PRIVILEGES;
create database am default character set utf8;
CREATE USER 'am'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON am. * TO 'am'@'%';
FLUSH PRIVILEGES;
create database rm default character set utf8;
CREATE USER 'rm'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON rm. * TO 'rm'@'%';
FLUSH PRIVILEGES;
create database hue default character set utf8;
CREATE USER 'hue'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON hue. * TO 'hue'@'%';
FLUSH PRIVILEGES;
create database oozie default character set utf8;
CREATE USER 'oozie'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON oozie. * TO 'oozie'@'%';
FLUSH PRIVILEGES;
create database sentry default character set utf8;
CREATE USER 'sentry'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON sentry. * TO 'sentry'@'%';
FLUSH PRIVILEGES;
create database nav_ms default character set utf8;
CREATE USER 'nav_ms'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nav_ms. * TO 'nav_ms'@'%';
FLUSH PRIVILEGES;
create database nav_as default character set utf8;
CREATE USER 'nav_as'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON nav_as. * TO 'nav_as'@'%';
FLUSH PRIVILEGES;
(4)#node1安装jdbc驱动
[root@node1 ~]# mkdir -p /usr/share/java/
[root@node1 ~]# ll mysql-connector-java-5.1.34.jar
-rw-r--r--. 1 root root 960372 11月 27 13:13 mysql-connector-java-5.1.34.jar
[root@node1 ~]# mv mysql-connector-java-5.1.34.jar /usr/share/java/
[root@node1 ~]# cd /usr/share/java
[root@node1 java]# ln -s mysql-connector-java-5.1.34.jar mysql-connector-java.jar
mysql-connector-java各种版本下载地址:
地址:http://mvnrepository.com/artifact/mysql/mysql-connector-java
选择对应版本号-->点击jar进行下载:
11、安装JDK
(1)node1解压、安装
[root@node1 ~]# cd /usr/local/src/
[root@node1 src]# tar zxf jdk-8u171-linux-x64.tar.gz -C /usr/local/
(2)#node1添加JDK环境变量
[root@node1 src]# vim /etc/profile #写入以下内容
#JDK1.8
export JAVA_HOME="/usr/local/jdk1.8.0_171"
export PATH=${PATH}:${JAVA_HOME}/bin
[root@node1 src]# source /etc/profile
[root@node1 src]# which java
/usr/local/jdk1.8.0_171/bin/java
(2)#node1上将目录/usr/local/jdk1.8.0_171 和/etc/profile 远程scp到node2和node3
[root@node1 src]# scp -pr /usr/local/jdk1.8.0_171 root@node2:/usr/local/
[root@node1 src]# scp -pr /usr/local/jdk1.8.0_171 root@node3:/usr/local/
[root@node1 src]# scp -pr /etc/profile root@node2:/etc/profile
[root@node1 src]# scp -pr /etc/profile root@node3:/etc/profile
[root@node1 ~]# sh rcmd.sh "source /etc/profile" #source
(4)#程序默认会去使用/usr/java下的jdk,所以解决办法执行以下两条命令即可:
[root@node1 ~]# sh rcmd.sh "mkdir -p /usr/java"
[root@node1 ~]# sh rcmd.sh "ln -s /usr/local/jdk1.8.0_171 /usr/java/default"
前面的一系列工作,如果都没问题...
接下来开始正式安装CDH...
12、先安装cloudera manager
(1)#node1上安装cloudera manager
[root@node1 ~]# yum -y install cloudera-manager-server
(2)#初始化数据库,
[root@node1 ~]# /usr/share/cmf/schema/scm_prepare_database.sh mysql cm cm 123456
说明:cm cm 123456 分别指:库名 用户名 密码 #就是上面安装MySQL时创建的
(3)#启动cloudera manager
[root@node1 ~]# systemctl start cloudera-scm-server
[root@node1 ~]# systemctl enable cloudera-scm-server
#7180是cloudera manager的端口,启动成功, 有时候需要稍等一下,端口才会出现
[root@node1 ~]# netstat -ntlp |grep 7180
tcp 0 0 0.0.0.0:7180 0.0.0.0:* LISTEN 46014/java
13、通过浏览器操作接下来的集群安装工作
默认账号、密码:admin admin
登录后:
继续,选免费版:
继续:
继续:
输入:192.168.3.31,192.168.3.32,192.168.3.33 这三台是我集群的主机IP,然后搜索:
搜索模式也可以这样写:192.168.3.[31-33]
继续:
继续,然后点击“更多选项”:
输入:http://192.168.3.31/CDH5.16.2/CDH 保存更改:
http://192.168.3.31/CDH5.16.2/CDH 就是我们搭建的CDH yum源地址
然后,再选“自定义存储库”,输入:http://192.168.3.31/CDH5.16.2/CM5
继续:
我们已经自己安装了JDK,所以不用在安装了
继续:
继续,我这里使用了root ,也可以用其它的普通用户,但是要有sudo权限,而且每台主机上都要有这个普通用户:
用密码或者私钥都可以
下面这一步等待全部安装成功,再继续:
等待parcel包分发完成,再继续:
继续,进行主机检查:
继续,我这里选了,含HBASE的内核:
继续,为每台主机分配角色,可以看自己需求分配:
生产中的机器一般都比较多,master类的节点要有两个,如:NameNode 、ResourceManager要开启HA,HBASE Master要安装两个节点;
数据库设置,信息是安装mysql时设置的:
测试连接成功后,继续:
一些设置,看自己需求,我这里没有改动:
生产中的数据目录应该都有专门的挂载分区的
下面等待集群组件启动:
由于主机资源太小,没有启动成功,其实这一步如果资源够用,应该没什么问题,启动以后,
集群就安装成功了:
没办法,但还是能进去主页看看的:
就是下面这样,好像只有zookeeper启动了:
安装基本就是这些;