本文将介绍Centos7.5(首先用cat /proc/version和getconf LONG_BIT) 离线安装CDH和Cloudera Manager过程,软件版本如下表1-1所示:
表1-1 软件版本选取
NO. | 软件名称 | 版本 |
---|---|---|
1 | 操作系统 | Centos7.5 64 位 |
2 | JDK | jdk-8u171-linux-x64 |
3 | Clouder Manager | 5.15.0 |
4 | CDH | 5.15.0 |
5 | 数据库 Mysql | 5.7 |
本次安装共7台服务器,服务器配置及用途如下表1-2所示:
表1-2 服务器基本规划配置
NO. | 机器名称 | 内网IP | 核/内存/硬盘 | 用途 |
---|---|---|---|---|
1 | prd-pg-cdh-mysql_slave-195 | 192.168.1.195 | 2C/4G/500GB | Mysql备份 |
2 | prd-pg-cdh-mysql_master-194 | 192.168.1.194 | 8C/32G/500GB | CM,Mysql主 |
3 | prd-pg-cdh-scm-115 | 192.168.1.115 | 8C/32G/4TB | AG,Cluster-M |
4 | prd-pg-cdh-node-190 | 192.168.1.190 | 40C/64G/32TB | AG,Cluster-N |
5 | prd-pg-cdh-node-191 | 192.168.1.191 | 40C/64G/32TB | AG,Cluster-N |
6 | prd-pg-cdh-node-192 | 192.168.1.192 | 40C/64G/32TB | AG,Cluster-N |
7 | prd-pg-cdh-node-193 | 192.168.1.193 | 40C/64G/32TB | AG,Cluster-N |
本部分是讲述,安装过程的checklist,也就是安装步骤总览,如表1-3所示:
类别 | 项目 | 当前进度 |
---|---|---|
资源 | 校核操作系统 | Centos7.5 64 位 |
资源 | 资源下载 | Jdk+cm+cdh |
Linux | Hostname-Hosts | 互ping |
Linux | Net-tools | 能够使用ifconfig和netstat |
Linux | 防火墙,selinux | 关闭成功 |
Linux | NTP对时 | 全主时间硬件更新 |
Linux | SSH免密 | SSH两两(包含127) |
Linux | Swappiness小于10 | 修改成功 |
Linux | 文件句柄改大 | 修改成功 |
Linux | 透明大页面关闭 | 修改成功 |
Soft | 依赖包 | 安装成功 |
Soft | Jdk | 安装成功 |
Soft | MySQL | root#root, navicat连接成功 |
CM-资源 | JDBC,CM,CDH | 移到/data/cdh |
CM-资源 | 解压,传包 | 包含Mysql-jar |
CM-安装 | Linux用户创建 | 完成 |
CM-安装 | CDH-数据库初始化 | Navicat查看 |
CM-安装 | Parcel目录 | 主从完成 |
CM-安装 | 配置 | 修改config.ini |
CDH-基本 | 基本组件(包含kudu) | 安装完成 |
散件 | Pig,hive | 独立运行成功 |
各组件调配 | 各组件 | 满足需求 |
JDK版本:jdk-8u171-linux-x64
jdk-8u171-linux-x64.rpm
下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
scala环境:
scala-2.11.8.rpm
下载地址:
https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.rpm
CM版本:5.15.0
cloudera-manager-centos7-cm5.15.0_x86_64.tar.gz
下载地址:
http://archive-primary.cloudera.com/cm5/cm/5/cloudera-manager-centos7-cm5.15.0_x86_64.tar.gz
CDH版本:5.15.0,
CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel
CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha1
manifest.json
下载地址:
http://archive-primary.cloudera.com/cdh5/parcels/5.15.0/ /manifest.json
http://archive-primary.cloudera.com/cdh5/parcels/5.15.0/CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel
http://archive-primary.cloudera.com/cdh5/parcels/5.15.0/CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha1
jar包版本:5.1.43,
mysql-connector-java-5.1.43.jar
下载地址:
http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.43/mysql-connector-java-5.1.43.jar
下载Mysql JDBC包:
wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.43/mysql-connector-java-5.1.43.jar
2.2. 修改机器名(所有节点)
2.2.1. 修改机器名称
hostnamectl set-hostname prd-pg-cdh-mysql-master-194 //设置机器名
hostname // 查看本机名
这种方式,在Centos7中可以永久性改变主机名称。
2.2.2. 每个节点机器,都要配置hosts
vim /etc/hosts
内容都改为:
127.0.0.1 localhost //建议保留此行
192.168.1.194 prd-pg-cdh-mysql-master-194
192.168.1.195 prd-pg-cdh-mysql-slave-195
192.168.1.115 prd-pg-cdh-scm-115
192.168.1.190 prd-pg-cdh-node-190
192.168.1.191 prd-pg-cdh-node-191
192.168.1.192 prd-pg-cdh-node-192
192.168.1.193 prd-pg-cdh-node-193
注:为了简便,可以先关闭防所有节点火墙,安装完成后,再按照下面步骤设置。
防火墙常用命令:
firewall-cmd –state(查询防火墙状态)
systemctl stop firewalld.service (关闭防火墙)
systemctl start firewalld.service (开启防火墙)
systemctl disable firewalld.service (禁止firewall开机启动)
//设置防火墙策略,在所有节点执行下面脚本(执行前要启动防火墙):
//集群机器间可以相互访问
firewall-cmd –permanent –add-rich-rule=”rule family=’ipv4’ source address=’172.16.3.168’ port protocol=’tcp’ port=’0-65535’ accept”
firewall-cmd –permanent –add-rich-rule=”rule family=’ipv4’ source address=’172.16.3.169’ port protocol=’tcp’ port=’0-65535’ accept”
firewall-cmd –permanent –add-rich-rule=”rule family=’ipv4’ source address=’172.16.3.170’ port protocol=’tcp’ port=’0-65535’ accept”
firewall-cmd –permanent –add-rich-rule=”rule family=’ipv4’ source address=’172.16.3.171’ port protocol=’tcp’ port=’0-65535’ accept”
firewall-cmd –permanent –add-rich-rule=”rule family=’ipv4’ source address=’172.16.3.172’ port protocol=’tcp’ port=’0-65535’ accept”
//设置可以访问的端口
firewall-cmd –permanent –add-port=0-65535/tcp
firewall-cmd –reload
注意: 需要在所有的节点上执行,因为涉及到的端口太多了,临时开放所有端口是为了安装起来方便,安装完毕后可以根据需要设置防火墙策略,保证集群安全。
将子节点设置为从主节点ssh无密码登陆(主节点访问从节点需要无密码互通,否则后面会出现问题)
在主节点上执行:
cd~ //进入到 根目录
ssh-keygen -t rsa
cat id_rsa.pub >> ~/.ssh/authorized_keys
一路回车,生成无密码的密钥对。
把公钥的内容追加到authorized_keys文件末尾(这个文件也在隐藏文件夹.ssh下,如果没有可以新建,下图是115,190-193的密钥):
并设置authorized_keys的访问权限:
chmod 600 ~/.ssh/authorized_keys
测试:在190点上执行ssh 192,正常情况下,不需要密码就能直接登陆进去了。
在190节点出现下面表示成功登录192节点:
互相登陆以下(包括localhost和127.0.0.1),让.ssh/known_hosts有如下内容,这样ssh的时候没有yes提示。
关闭linux SELINUX安全内核
setenforce 0 (临时生效)
修改 /etc/selinux/config 下的 SELINUX=disabled (重启后永久生效)
vi /etc/selinux/config
内容增加:
SELINUX=disabled
重启后生效:
reboot
查看SELINUX 是否关闭:
sestatus
(在Centos7中遇到SELINUX无法关闭的问题,重新启动机器恢复正常)
为避免安装过程中出现的异常问题,首先调整Linux内核参数。
查看swappiness
cat /proc/sys/vm/swappiness
//永久性修改,执行下面两条命令
sysctl -w vm.swappiness=10
echo vm.swappiness = 10 >> /etc/sysctl.conf
自CentOS6版本开始引入了Transparent Huge Pages(THP),从CentOS7版本开始,该特性默认就会启用。尽管THP的本意是为提升内存的性能,不过某些数据库厂商还是建议直接关闭THP,否则可能会导致性能出现下降。
首先查看透明大页是否启用,[always] never表示已启用,always [never]表示已禁用:
cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
以上状态就说明是启用的。
临时关闭(重启机器会变回默认开启状态):
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
永久关闭:
//编辑/etc/rc.d/rc.local
vim /etc/rc.d/rc.local
//在文件后添加下面内容:
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
保存退出,然后赋予rc.local文件执行权限:
chmod +x /etc/rc.d/rc.local
重启系统,以后再检查THP状态,显示状态被禁用了。
注意:修改limits.conf这类限制资源使用的文件,一定要备份配置文件,并进行测试,最好能多开一个终端,在当前终端不可使用的时候,用来执行补救措施。否则可能所有远程连不上,就要去机房了。
//查看文件句柄数,显示1024,显然太小
ulimit -n
1024
//修改系统文件句柄数限制
vim /etc/security/limits.conf
//在文件后加入下面内容:
* soft nofile 100000
* hard nofile 100000
修改后需要重启机器。
注意:(如果使用kudu,确保服务开启,而不是一主三从)
集群中所有主机必须保持时间同步,如果时间相差较大会引起各种问题。 具体建设过程如下:
yum install ntp ntpdate -y
编辑 /etc/ntp.conf:
vi /etc/ntp.conf
//在文件中输入上面网页内容:1.5是内部ntp服务器
server 192.168.1.5
然后在命令行执行
ntpdate 192.168.1.5 && /sbin/hwclock -w
systemctl start ntpd
systemctl enable ntpd.service
注意:如果ntpd 开机启动失效,有可能是因为安装了chronyd 并且是开机自启状态,所以导致ntpd开机自启失败。
查看 chronyd设置状态
systemctl status chronyd
显示如下:
以面表明,chronyd显示为开机启动状态。
将chronyd设为禁用状态:
systemctl disable chronyd.service
此时,NTP的服务开机自启动完成!
检查是否设置成功:
关于设置参考:https://www.jianshu.com/p/fb32239ccf2b
ntpq -p
//更新时间
timedatectl set-timezone Asia/Shanghai
timedatectl set-ntp yes
hwclock –systohc
timedatectl && /sbin/hwclock -w
yum install -y chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb mod_ssl unzip
注意这里加了一个mod_ssl用来解决hue问题,unzip是livy解压用的。
yum -y install lrzsz #为了上传下载方便,安装这个软件
下载rpm 安装包jdk-8u171-linux-x64.rpm
CentOS系统一般自带OpenJdk,需要卸载掉自带的OpenJdk,使用
rpm -qa | grep java
查询java相关的包,使用
rpm -e –nodeps +包名
强制卸载掉,下面安装oralce JDK
rpm -ivh jdk-8u171-linux-x64.rpm #jdk
rpm -ivh scala-2.11.8.rpm #scala
scp 192.168.1.193:/opt/scala-2.11.8.rpm ./ && rpm -ivh scala-2.11.8.rpm && rm -f scala-2.11.8.rpm
配置JAVA_HOME环境变量:
修改/etc/profile文件配置环境变量, 执行命令:
vi /etc/profile
在profile文件最后,输入下面内容,保存并退出。
export JAVA_HOME=/usr/java/ jdk1.8.0_171-amd64
export PATH=$PATH:$JAVA_HOME/bin
或者使用:
echo "export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64">>/etc/profile
echo "export PATH=\$PATH:\$JAVA_HOME/bin">>/etc/profile
执行下面命令,让配置生效
source /etc/profile //使修改立即生效
echo $PATH //查看PATH值
echo $JAVA_HOME //查看JAVA_HOME值
在Centos7中修改/etc/profile文件配置环境变量,机器启动后有时不生效,可以修改/etc/ bashrc文件配置环境变量:
echo "export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64">>/etc/bashrc
echo "export PATH=\$PATH:\$JAVA_HOME/bin">>/etc/bashrc
source /etc/bashrc
vi /etc/bashrc
//在文件最后加入:
export JAVA_HOME=/usr/java/jdk1.8.0_151
export PATH=$PATH:$JAVA_HOME/bin
//使修改立即生效
source /etc/bashrc
//查看JAVA_HOME值
echo $JAVA_HOME
到官网https://dev.mysql.com/downloads/file/?id=469456选择对应安装包:
1) 下载安装包
wget https://cdn.mysql.com//archives/mysql-5.7/mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar
2) 解压安装包
tar -xvf mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar
解压后文件列表:
mysql-community-embedded-devel-5.7.18-1.el7.x86_64.rpm
mysql-community-devel-5.7.18-1.el7.x86_64.rpm
mysql-community-client-5.7.18-1.el7.x86_64.rpm
mysql-community-common-5.7.18-1.el7.x86_64.rpm
mysql-community-embedded-5.7.18-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.18-1.el7.x86_64.rpm
mysql-community-libs-5.7.18-1.el7.x86_64.rpm
mysql-community-server-minimal-5.7.18-1.el7.x86_64.rpm
mysql-community-test-5.7.18-1.el7.x86_64.rpm
mysql-community-minimal-debuginfo-5.7.18-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.18-1.el7.x86_64.rpm
3) 按次序安装
按common–>libs–>client–>server的顺序安装:
rpm -ivh mysql-community-common-5.7.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.18-1.el7.x86_64.rpm
//安装下面包,否则Hue安装报连接错误
rpm -ivh mysql-community-libs-compat-5.7.18-1.el7.x86_64.rpm
4) 启动数据库
systemctl start mysqld
查看状态:
systemctl status mysqld
5) 修改MySQL初始密码
1、先修改配置文件/etc/my.cnf令MySQL跳过登录时的权限检验,在[mysqld]下加入一行:
skip-grant-tables
2、重启MySQL
systemctl restart mysqld
3、免密码登录MySQL。
mysql
4、mysql客户端执行如下命令,修改root密码
mysql> use mysql;
mysql> UPDATE user SET authentication_string = password(‘root’) WHERE host = ‘localhost’ AND user = ‘root’;
mysql> select host,user, authentication_string, password_expired from user;
mysql> update user set password_expired=’N’ where password_expired=’Y’ //密码不过期
mysql> update user set host=’%’ where user=’root’ and host=’localhost’; //远程可访问
mysql> flush privileges; //刷新
mysql> exit;//退出
5、修改配置文件/etc/my.cnf删除此前新增那一行skip-grant-tables,并重启MySQL(这一步非常重要,不执行可能导致严重的安全问题)
systemctl restart mysqld
主备复制是mysql在3.23版本以后才提供的功能,原理如下:
1 首先,Mysql主库在事务提交时会把数据变更作为事件Events记录在二进制日志文件Binlog中;MYSQL主库上的sync_binlog参数控制Binlog日志刷新到磁盘。
2 主库推送二进制日志文件binlog中的事件到从库的中继日志relay log,之后从库根据中继日志重做数据变更操作,通过逻辑复制以此来达到主从数据一致。
这里涉及3个线程:主库上的Binlog Dump;从库上的I/O和SQL。
主备脚本如下:
准备两个机器:一台为主master、一台为备salve
第一步:主服务器(matser)配置如下:
vim /etc/my.cnf
server –id(主从机器的server-id要不一样)
log-bin=mysql-bin ###打开注释
/etc/init.d/mysqld restart
mysql -uroot -proot -e “show variables like ‘log_bin’;” ####判断是否打开
mysql -uroot -proot
mysql>grant replication slave on . to ‘rep’@’192.168.1.195’ identified by ‘waQ,qR%be2(5’;
mysql>flush privileges;
mysql>flush table with read lock;
mysql>show master status;
+——————+———–+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———–+————–+——————+
| mysql-bin.000109 | 592 | | |
+——————+———–+————–+——————+
mysqldump -uroot -proot -A -B –events –master-data=2 |gzip >/data0/backup.sql.gz
unlock tables;
scp -P22678 /data0/backup.sql.gz [email protected]:/data0/
从服务器(matser)配置如下:
gunzip < /data0/backup.sql.gz | mysql -uroot -proot
mysql -uroot -ph47Ny0GR3A
change master to
master_host=’192.168.1.194’,
master_port=3306,
master_user=’rep’,
master_password=’waQ,qR%be2(5’,
master_log_file=’mysql-bin.000002’,
master_log_pos=592;
start slave;
show slave status\G;
在主节点上下载相关软件包,这里将软件包下载到/data/ cdh/目录下。
cd /data/cdh
下载Mysql JDBC包:
wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.43/mysql-connector-java-5.1.43.jar
CM,CDH移到/data/cdh
拷贝两个jar到所有Server、Agent节点
scp /data/cdh/mysql-connector-java-5.1.43.jar [email protected]:/data/cdh
scp /data/cdh/cloudera-manager-centos7-cm5.15.0_x86_64.tar.gz [email protected]:/data/cdh
在所有节点将CM解压到/opt/目录:
tar -zxvf /data/cdh/cloudera-manager-centos7-cm5.15.0_x86_64.tar.gz -C /opt2/
ls /opt/
cloudera cm-5.15.0
在所有节点上执行:
useradd –system –home=/opt/cm-5.15.0/run/cloudera-scm-server –no-create-home –shell=/bin/false –comment “Cloudera SCM User” cloudera-scm
在所有节点上:
//如果没有/usr/share/java/目录,则创建
cp /data/cdh/mysql-connector-java-5.1.43.jar /usr/share/java/mysql-connector-java.jar
在主节点上:
//将mysql JDBC jar 包拷贝到 /opt/cm-5.15.0/share/cmf/lib/ 目录
cp /data/cdh/mysql-connector-java-5.1.43.jar /opt/cm-5.15.0/share/cmf/lib/
在主节点上:
mysql -h127.0.0.1 -uroot -p //加参数-h127.0.0.1 指定本机方式,否则可能不允许执行grant
Enter password: \输入数据库密码
//在MariaDB [(none)]>命令状态输入下面脚本:
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database monitor DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
grant all privileges on . to root@localhost identified by ‘root’ with grant option;
grant all on . to root@”%” Identified by “root”;
flush privileges;
exit;
//初始化CM,执行下面脚本
/opt/cm-5.15.0/share/cmf/schema/scm_prepare_database.sh mysql -h prd-pg-cdh-mysql-master-194 -uroot -proot –scm-host prd-pg-cdh-mysql-master-194 scm scm scm
(对应于:数据库类型、数据库服务器、用户名、密码、CMServer所在节点…….)
注意:上面的指令是数据库服务器在194,cm在115的指令
//如果出现下面错误:
java.sql.SQLException: Access denied for user ‘root’@’localhost’ (using password: YES)
//解决办法:
在/etc/hosts 文件中,加上
127.0.0.1 localhost.prd-pg-cdh-scm-115
脚本/scm_prepare_database.sh 执行成功界面:
如下是正确结果
Manager节点
创建目录/opt/cloudera/parcel-repo,执行:
mkdir -p /opt/cloudera/parcel-repo
chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
//进入软件包目录
cd /data/cdh
//拷贝三个文件到/opt/cloudera/parcel-repo/目录
cp CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha1 manifest.json /opt/cloudera/parcel-repo/
//进入/opt/cloudera/parcel-repo/目录
cd /opt/cloudera/parcel-repo/
//修改文件名
mv CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha1 CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha
Agent节点
Agent节点创建目录/opt/cloudera/parcels,执行:
mkdir -p /opt/cloudera/parcels
chown cloudera-scm:cloudera-scm /opt/cloudera/parcels
修改/opt/cm-5.15.0/etc/cloudera-scm-agent/config.ini文件:
//将config.ini server_host=localhost 内容改为server_host=192.168.1.194
sed -i “s/server_host=localhost/server_host=192.168.1.194/” /opt/cm-5.15.0/etc/cloudera-scm-agent/config.ini
在主节点上,启动cloudera-scm-server:
/opt/cm-5.15.0/etc/init.d/cloudera-scm-server start
启动过程较慢,可通过/opt/cm-5.15.0/log/cloudera-scm-server日志,查看启动过程。
在所有节点上,启动cloudera-scm-agent:
/opt/cm-5.15.0/etc/init.d/cloudera-scm-agent start
地址:http://主节点IP:7180
用户名、密码:admin
好了,文章分节上传如下:亲测可用,如果有问题,联系18192015917(叫我:涵哥,白哥,帅哥。。都行)