1、安装环境
本例中
-
采用VMware-workstation-full-15.5.0-14665864.exe作为虚拟化载体
-
采用CentOS-7.2-x86_64-Minimal-1511.iso作为系统镜像
-
采用一个masterle两个slave的三节点集群架构
注:具体配置请根据自己的搭建环境进行调整
VMware和CentOS-7.2的安装以及网络配置可参考另外两篇文章:
虚拟机中安装Linux系统(CentOS7)和三种网络配置超级详细教程
2、安装包准备
1.官网下载
(目前官网已经不提供下载了,下面截图是之前下载时截的图,方便大家参考需要那些安装包)
- Cloudera Manger下载
下载地为
https://archive.cloudera.com/cm6/6.3.1/redhat7/yum/RPMS/x86_64/
- CDH下载
下载地址为 https://archive.cloudera.com/cdh6/6.3.2/parcels/
2.网盘下载
(由于cloudera官网从2021年2月1日起全面移除的非订阅用户的下载链接,我将安装包传到百度网盘了,供大家下载使用)
注:除了下载CM和CDH相关安装包之外,还需要下载MySql安装包
微信搜索关键字“大数据峡谷”或扫描下方二维码关注微信公众号,回复“cdh6.3.2” 可获取完整的百度网盘下载连接地址图片
3、环境准备
1.修改主机名(所有节点)
所有机器都需要修改主机名称,
下面以cm01举例,其他两台服务器修改相对应的名称
hostnamectl set-hostname cm01
2.设置主机名映射(所有节点)
所有机器都需编辑 hosts 文件
vi /etc/hosts
添加如下内容
192.168.0.201 cm01
192.168.0.202 cm02
192.168.0.203 cm03
3.关闭并禁用防火墙(所有节点)
所有机器都需要关闭防火墙
systemctl stop firewalld.service
禁止开机启动
systemctl disable firewalld.service
#验证
systemctl status firewalld
4.设置selinux(所有节点)
临时关闭 selinux
setenforce 0
永久关闭 selinux
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
#验证
cat /etc/selinux/config
5.设置ssh免密登录(所有节点)
生成公钥和私钥,无需指定口令密码,直接回车
[root@cm01 ~]# ssh-keygen -t rsa
进入到.ssh/目录
[root@cm01 ~]# cd ~/.ssh/
将公钥拷贝到要免密登录的目标机器上
[root@cm01 .ssh]# ssh-copy-id cm01
[root@cm01 .ssh]# ssh-copy-id cm02
[root@cm01 .ssh]# ssh-copy-id cm03
验证:
在任意机器上对集群其他节点进行进行ssh登陆
不需要使用密码则为配置成功
注意:三台服务器都需要免密,方法同上
6.禁用透明大页面(所有节点)
查看透明大页的设置和启动状态
[root@cm02 ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
[root@cm02 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
#以下是关闭操作
#临时关闭
[root@cm02 ~]# echo never > /sys/kernel/mm/transparent_hugepage/defrag
[root@cm02 ~]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
#永久关闭
#将临时关闭的命令添加到/etc/rc.d/rc.local文件中,并赋予执行权限
[root@cm02 ~]# echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.d/rc.local
[root@cm02 ~]# echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local
[root@cm02 ~]# chmod +x /etc/rc.d/rc.local
#验证
[root@cm02 ~]# cat /etc/rc.d/rc.local
7.修改Linux swappiness(所有节点)
Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10
临时修改:
sysctl vm.swappiness=10
cat /proc/sys/vm/swappiness
这里我们的修改已经生效,但是如果我们重启了系统,又会变成60.
#永久修改:
在/etc/sysctl.conf 文件里添加如下参数:
vm.swappiness=10
或者:
echo 'vm.swappiness=10'>> /etc/sysctl.conf
8.安装jdk(所有节点)
注意:CDH的安装 要求使用指定版本的oracle-j2sdk1.8
查询是否有已经安装的jdk
[root@cm01 ~]# rpm -qa | grep java
如果之前安装过Java组件,先将其卸载
yum remove java*
上传安装包oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm到/opt目录
[root@cm01 ~]# cd /opt
[root@cm01 opt]# ls
安装
[root@cm01 opt]# rpm -ivh oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
查找jdk安装路经
[root@cm01 opt]# find / -name java
配置环境变量
[root@cm01 opt]# echo 'export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera' >> /etc/profile
[root@cm01 opt]# echo 'export PATH=.:$JAVA_HOME/bin:$PATH' >> /etc/profile
[root@cm01 opt]# source /etc/profile
验证
[root@cm01 opt]# java -version
9.部署NTP服务器进行时间同步
时间同步的方式:找一个机器, 作为时间服务器, 所有的机器与这台集群时间进行定时的同步, 比如, 每隔十分钟, 同步一次时间。
配置时间同步具体实操:
时间服务器配置(必须 root 用户,cm01节点)
(1) 检查 ntp 是否安装 (所有服务器)
[root@cm02 opt]# rpm -qa|grep ntp
如果没有以上内容,执行以下命令进行安装
yum install -y ntp
(2) 修改 ntp 配置文件
[root@cm01 opt]# vim /etc/ntp.conf
修改内容如下
a) 修改 1(授权 192.168.0.0-192.168.0.255 网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 为restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
结果如下:
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
b) 修改 2(集群在局域网中, 不使用其他互联网上的时间)
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 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 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
c) 添加 3(当该节点丢失网络连接, 依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
结果如下:
server 127.127.1.0
fudge 127.127.1.0 stratum 10
(3) 修改/etc/sysconfig/ntpd 文件
[root@cm01 opt]# vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
(4) 查看 ntpd 服务 状态
[root@cm01 opt]# systemctl status ntpd.service
(5) 启动 ntpd 服务
[root@cm01 opt]# systemctl restart ntpd.service
(7) 设置 ntpd 服务开机启动
[root@cm01 ~]# systemctl enable ntpd.service
2.其他机器配置(必须 root 用户)
(1) 在其他机器配置 10 分钟与时间服务器同步一次
[root@cm02 ~]# crontab -e
编写定时任务如下:
*/10 * * * * /usr/sbin/ntpdate cm01
(2) 在cm01修改任意机器时间
[root@cm01 ~]# date -s "2017-9-11 11:11:11"
(3) 十分钟后查看机器是否与时间服务器同步
[root@cm02 ~]# date
说明:测试的时候可以将 10 分钟调整为 1 分钟, 节省时间。
(4)查看主服务器时间
[root@cm01 ~]# date
我这里就和自己计算机的系统时间是统一的。
如果发现不统一的话,
就同步网络时间:(需要先关闭ntp服务,启动之后再重新启动
systemctl stop ntpd.service
ntpdate ntp1.aliyun.com
然后接着同步本地的时间:
hwclock --systohc
启动 ntpd 服务
systemctl start ntpd.service
4、MySql安装
(mysql安装在master主节点,本例中cm01)
1.安装包准备
1.将下载好的mysql相关安装包上传到/opt/mysql下
2. 如果是虚拟机按照如下步骤执行
卸载自带的 Mysql-libs(如果之前安装过 mysql, 要全都卸载掉)
[root@cm01 ~]# rpm -qa | grep -i -E mysql\|mariadb | xargs -n1 sudo rpm -e --nodeps
3. 如果是阿里云服务器按照如下步骤执行
(1) 卸载 MySQL 依赖, 虽然机器上没有装 MySQL, 但是这一步不可少
[root@cm01 ~]# yum remove mysql-libs
(2) 下载依赖并安装
[root@cm01 ~]# sudo yum install libaio
[root@cm01 ~]# sudo yum -y install autoconf
2.安装mysql
1) 安装 mysql 依赖
[root@cm01 ~]# cd /opt/mysql/
[root@cm01 mysql]# rpm -ivh 01_mysql-community-common-5.7.16-1.el7.x86_64.rpm
[root@cm01 mysql]# rpm -ivh 02_mysql-community-libs-5.7.16-1.el7.x86_64.rpm
[root@cm01 mysql]# rpm -ivh 03_mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm
2) 安装 mysql-client
[root@cm01 mysql]# rpm -ivh 04_mysql-community-client-5.7.16-1.el7.x86_64.rpm
3) 安装 mysql-server
[root@cm01 mysql]# rpm -ivh 05_mysql-community-server-5.7.16-1.el7.x86_64.rpm
注意:如果报如下错误, 这是由于 yum 安装了旧版本的 GPG keys 所造成, 从 rpm 版本 4.1 后, 在安装或升级软件包时会自动检查软件包的签名。warning: 05_mysql-community-server-5.7.16-1.el7.x86_64.rpm:Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEYerror: Failed dependencies:libaio.so.1()(64bit) is needed bymysql-community-server-5.7.16-1.el7.x86_64
解决办法
[root@cm01 mysql]# rpm -ivh 05_mysql-community-server-5.7.16-1.el7.x86_64.rpm --force --nodeps
4) 启动 mysql
[root@cm01 mysql]# systemctl start mysqld
5) 查看 mysql 密码
[root@cm01 mysql]# cat /var/log/mysqld.log | grep password
3.配置mysql
配置只要是 root 用户+密码, 在任何主机上都能登录 MySQL 数据库。
1) 用刚刚查到的密码进入 mysql(如果报错, 给密码加单引号)
[root@cm01 mysql]# mysql -uroot -p'-dQt5l:ed#C!'
2) 设置复杂密码(由于 mysql 密码策略, 此密码必须足够复杂)
mysql> set password=password("Qs23=zs32");
3) 更改 mysql 密码策略
mysql> set global validate_password_length=4;
mysql> set global validate_password_policy=0;
4) 设置简单好记的密码
mysql> set password=password("123456");
5) 进入 msyql 库
mysql> use mysql
6) 查询 user 表
mysql> select user, host from user;
7) 修改 user 表, 把 Host 表内容修改为%
mysql> update user set host="%" where user="root";
8) 刷新
mysql> flush privileges;
9) 退出
mysql> quit;
10)备份数据库配置文件
[root@cm01 mysql]# cp /etc/my.cnf{,.bak}
11)官网推荐配置
[root@cm01 ~]# vim /etc/my.cnf
#添加以下内容
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
transaction-isolation = READ-COMMITTED
#Disabling symbolic-links is recommended to prevent assorted security risks;
#to do so, uncomment this line:
symbolic-links = 0
key_buffer_size = 32M
max_allowed_packet = 32M
thread_stack = 256K
thread_cache_size = 64
query_cache_limit = 8M
query_cache_size = 64M
query_cache_type = 1
max_connections = 550
#expire_logs_days = 10
#max_binlog_size = 100M
#log_bin should be on a disk with enough free space.
#Replace '/var/lib/mysql/mysql_binary_log' with an appropriate path for your
#system and chown the specified folder to the mysql user.
log_bin=/var/lib/mysql/mysql_binary_log
#In later versions of MySQL, if you enable the binary log and do not set
#a server_id, MySQL will not start. The server_id must be unique within
#the replicating group.
server_id=1
binlog_format = mixed
read_buffer_size = 2M
read_rnd_buffer_size = 16M
sort_buffer_size = 8M
join_buffer_size = 8M
# InnoDB settings
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 64M
innodb_buffer_pool_size = 4G
innodb_thread_concurrency = 8
innodb_flush_method = O_DIRECT
innodb_log_file_size = 512M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
sql_mode=STRICT_ALL_TABLES
12)重启MySQL数据库
service mysqld restart
13)提前创建好以后可能用到的数据库
登录 MySQL 数据库
mysql -uroot -p
创建数据库和用户(后面会用到)
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'scm@123';
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY 'amon@123';
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY 'rman@123';
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'hue@123';
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON metastore.* TO 'metastore'@'%' IDENTIFIED BY 'metastore@123';
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY 'sentry@123';
CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY 'nav@123';
CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY 'navms@123';
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'oozie@123';
flush privileges;
#开放mysql远程权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
14).上传jdbc依赖包(所有节点)
创建目录
[root@cm01 ~]# mkdir -p /usr/share/java
上传
[root@cm01 ~]# cp /opt/mysql/mysql-connector-java-5.1.48.jar /usr/share/java
重命名
[root@cm01 ~]# mv /usr/share/java/mysql-connector-java-5.1.48.jar /usr/share/java/mysql-connector-java.jar
移动都其它服务器
[root@cm01 ~]# scp /usr/share/java/mysql-connector-java.jar root@cm02:/usr/share/java/
[root@cm01 ~]# scp /usr/share/java/mysql-connector-java.jar root@cm03:/usr/share/java/
5、Cloudera Manager 安装
1.配置本地 Cloudera Manager 仓库(在主节点上操作,本例cm01)
#创建本地 CM 仓库文件夹
mkdir -p /var/www/html/cloudera-repos/cm6/
#上传下载好的 CM 安装包放入 /var/www/html/cloudera-repos/cm6/ 目录
#安装 httpd 和 createrepo
yum -y install httpd createrepo
#启动 httpd 服务并设置为开机自启动
systemctl start httpd && systemctl enable httpd
#生成 RPM,注意最后必须有 .
cd /var/www/html/cloudera-repos/cm6/ && createrepo .
#通过浏览器访问了:默认端口 80
http://cm01/cloudera-repos/cm6/
2.配置本地CDH仓库(在主节点上操作,本例cm01)
#创建本地 CDH 仓库文件夹
mkdir -p /var/www/html/cloudera-repos/cdh6/
#上传下载好的 CDH 安装包放入 /var/www/html/cloudera-repos/cdh6/ 目录
#生成 RPM,注意最后必须有 .
cd /var/www/html/cloudera-repos/cdh6/ && createrepo .
#通过浏览器访问了:默认端口80
http://cm01/cloudera-repos/cdh6/
3.构建yum源(所有服务器上都操作)
#所有机器都需要配置
vi /etc/yum.repos.d/cloudera-repo.repo
#拷贝如下内容
[cloudera-repo]
name=cloudera-repo
baseurl=http://cm01/cloudera-repos/cm6/
enabled=1
gpgcheck=0
#清理
yum clean all
yum makecache
4.安装CM Server和Agent
主节点(cm01)
yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
安装完CM后/opt/ 下会出现cloudera目录
从节点(cm02和cm03)
yum install cloudera-manager-daemons cloudera-manager-agent
5.建立CM数据库
参考文档:官网创建 CM 数据库教程
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm scm@123
6.启动CM Server(cm01)
#启动服务
systemctl start cloudera-scm-server
#查看服务的状态
systemctl status cloudera-scm-server
#查看系统日志
journalctl -xe
#默认日志存放地方
/var/log/cloudera-scm-server
7.访问服务
#需要等几分钟 不要慌
http://cm01:7180
6、Cloudera Manager 初始化集群配置
6.1.用户登录
http://cm01:7180
用户名:admin ,密码:admin
6.2、选择版本
1、欢迎页面
2、接受最终用户许可条款和条件。
3、选择免费版本
6.3、群集安装
1、欢迎页面
2、群集名称
3、扫描主机,输入主机名称点击搜索(cm01,cm02,cm03)
4、选择存储库
自定义存储库:http://cm01/cloudera-repos/cm6/
远程 Parcel 存储库 URL :http://cm01/cloudera-repos/cdh6/
保存更改 继续
5、JDK 安装选项,跳过不需要勾选(前面应安装过了)
6、提供 SSH 登录凭据
7、Install Agents ,自动安装
记录CDH安装的一个坑:在web界面安装 agent那一步,抛错,单击信息查看如下,could not contact scm server at localhost:7182, giving up错误:
解决做法:
在报错的节点上执行
mv /usr/bin/host /usr/bin/host.bak
7、Install Parcels,自动安装(比较慢,请耐心等待)
8、Inspect Cluster检查集群
先点击 Inspect Network Performance 再点击 Inspect Hosts
警告,点击 显示检查器结果,对相对应的警告做相对应的措施就可以了。如果完全按照上面的教程走,是不会有警告的。
6.4、群集设置
1、Select Services
自定义服务,选择zk、yarn、hdfs
2、自定义角色分配
3、数据库设置
Databases for Cloudera Software 参考如下,密码是用户名后面加@123
填好密码之后点击测试连接,连接成功之后继续
4、审核更改,默认设置
5、命令详细信息
6、汇总
7.CM管理页面
安装完成之后会有一些警告错误信息,不要紧张,很正常的现象,需要自己根据实际情况去修改配置,我在这儿就不一一说明了,大家可以实时关注我后面的文章找到解决方案。