第一次搭建CDH,留个文档记录下出现的问题和学到的东西。主要参考:
【CDH实战01】基于CentOS7的CDH6.3.2完全分布式集群搭建【上】
【CDH实战02】基于CentOS7的CDH6.3.2完全分布式集群搭建【下】
如何从0开始学习大数据技术
2020年12月31日CDH6.3.2集群搭建全流程教程
这几篇文章对整个流程做了详细的讲解,感谢作者~
目录
1. CDH概述
2. 安装准备工作
2.1 文件准备
2.2 服务器准备
2.2.1 建立虚拟机
2.2.2 设置主机名映射(所有节点)
2.2.3 设置SSH免密登陆(所有节点)
2.2.4 关闭并禁用防火墙(所有节点)
2.2.5 关闭SELINUX(所有节点)
2.2.6 禁用透明大页(所有节点)
2.2.7 修改Linux swappiness参数(所有节点)
2.2.8 安装JDK(所有节点)
2.2.9 上传JDBC依赖包(所有节点)
2.2.10 时间同步
2.2.11 安装MySQL(master节点,本例中node0)
3 安装CDH
3.1 搭建本地yum源
3.1.1 安装并启动Apache http
3.1.2 上传CM安装文件
3.1.3 创建yum仓库
3.1.4 配置yum仓库文件
3.2 安装服务
3.3 初始化cloudera-manager-server
3.3.1 在mysql中为CMServer创建数据库
3.3.2 执行CM初始化脚本
3.3.3 启动cm-server服务
CDH是Cloudera’s Distribution Including Apache Hadoop的简称,是基于稳定版本的Hadoop组件进行编译的,简单来讲,CDH就是一个拥有集群自动化安装、中心化管理、集群监控、报警功能,用来集中管理Hadoop集群的工具。它简化了大数据平台的安装,缩短集群安装时间,减小运维工作量,极大的提高了集群管理的效率。
今年2月份开始Cloudera全面下架了免费的安装包下载渠道,未订阅授权的用户无法使用CDH6.3.3和之后的版本,此处使用CDH6.3.2版本进行集群搭建。下图为CDH6.3.2对应的组件版本。
因为使用离线安装的方式,需要提前下载好需要用到的安装包,参考文章的博主提供了下载渠道。
百度网盘 链接:https://pan.baidu.com/s/1h65lZ2QKuMD0xT1LNy-JdQ (提取码:amos)
文件列表如下
本次需要通过VMware建立三台虚拟机作为服务器。
选择的操作系统是CentOS 7: CentOS-7-x86_64-DVD-1708.iso ,下载链接来自参考文章。
虚拟机内存和硬盘的分配如下,安装完成之后每个结点占用的硬盘空间在20GB左右,所以在安装虚拟机的时候硬盘分配不能少于30GB,否则会出现空间不足的错误。
首先新建一台2G内存的虚拟机并配置网络,方便进行克隆,之后再修改这台虚拟机内存为6G。网络配置可见:VM虚拟机centOS网络设置 。
结点名称 | 内存大小(G) | 硬盘大小(G) | IP地址 |
node0 | 6 | 60 | 192.168.137.100 |
node1 | 2 | 60 | 192.168.137.101 |
node2 | 2 | 60 | 192.168.137.102 |
将新建的虚拟机进行两次克隆,得到3台虚拟机,修改克隆出来机器的网卡配置。参考文章:CentOS7虚拟机克隆,且成功互ping
删除UUID (文章中说还需要删除MAC地址信息HWADDR,我的ifcfg-ens33中无此信息),并分别修改两台克隆机ip地址为192.168.137.101、192.168.137.102,保存退出,重启网络。(参考文章中提到需要删除/etc/udev/rules.d/70-persistent-net.rules,我的机器中没有这个文件,原因及文件作用暂不深究,发现一相关文章,马克一下:70-persistent-net.rules以及网卡配置详解)
service network restart(或systemctl restart network )
配置好后,试验虚拟机互ping成功 。
接下来修改hostname,以192.168.137.101这台机器为例
修改hostname:
-
hostnamectl
set-hostname node1
#修改
-
hostname
#查看
修改 hosts文件:
增加网络映射 ,在文件后增加如下内容
vi /etc/hosts #修改hosts文件
验证能否ping通:
ping -c 4 node2 #尝试ping node2
生成密钥对:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa #生成密钥
向其他节点分发密钥 :
-
ssh-copy-id node1
#分发密钥
-
yes
-
密码
测试SSH:
ssh node1 #测试
查看防火墙状态:
systemctl status firewalld #查看防火墙服务运行状态
关闭防火墙 :
-
systemctl stop firewalld
#关闭防火墙
-
systemctl
disable firewalld
#禁用防火墙开机自启
验证防火墙状态:
systemctl status firewalld #查看防火墙状态为关闭状态
SELINUX相关知识:理解Linux下的SELinux
查看SELINUX状态:
getenforce #查看SELINUX服务的运行状态
关闭SELINUX:
临时关闭
setenforce 0 #临时关闭
永久关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #永久关闭
验证SELINUX状态:
cat /etc/selinux/config #验证
透明大页相关知识:
CENTOS 7 关闭透明大页
Huge pages (标准大页)和 Transparent Huge pages(透明大页)
查看透明大页的设置和启动状态:
-
cat /sys/kernel/mm/transparent_hugepage/defrag
-
cat /sys/kernel/mm/transparent_hugepage/enabled
使用命令查看时,如果输出结果为 [always] 表示透明大页启用了。
[never] 表示透明大页禁用、 [madvise] 表示(只在 MADV_HUGEPAGE 标志的 VMA 中使用 THP 。
关闭透明大页:
临时关闭
-
echo
never >
/sys/kernel/mm/transparent_hugepage/defrag
-
echo
never >
/sys/kernel/mm/transparent_hugepage/enabled
永久关闭
将临时关闭命令添加到/etc/rc.d/rc.local文件中,并赋予执行权限
-
echo
'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.d/rc.local
-
echo
'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local
-
chmod +x /etc/rc.d/rc.local
验证修改 :
cat /etc/rc.d/rc.local
swappiness相关知识:swappiness参数的含义和设置
为了避免服务器使用swap功能而影响服务器性能,一般都会把vm.swappiness修改为0(cloudera建议10以下)
-
cd /usr/lib/tuned
-
grep
"vm.swappiness" * -R
-
sed -i s/
"vm.swappiness = 30"/
"vm.swappiness = 10"/g /usr/lib/tuned/virtual-guest/tuned.conf
注意:CDH的安装 要求使用指定版本的oracle-j2sdk1.8
查询是否有已经安装的jdk:
rpm -qa | grep java
如果之前安装过Java组件,先将其卸载
yum remove java*
我这里没有
上传安装包oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm到/opt目录 :
在准备工作中,把安装包上传到了node0上,使用scp命令将node0上的安装包分发到node1,node2上
SCP相关知识:Linux scp命令
scp oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm node1:/opt/
启动安装 :
rpm -ivh oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
查找JDK路径:
find / -name java
配置环境变量:
-
echo
'export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera' >> /etc/profile
-
echo
'export PATH=.:$JAVA_HOME/bin:$PATH' >> /etc/profile
-
source /etc/profile
source命令相关知识:Linux下source命令详解
验证:
java -version
CDH节点管理和记录节点状态时,都是把节点状态保存在MySQL数据库中。
JDBC必须在/usr/share/java目录下,且命名为 mysql-connector-java.jar
创建目录:
mkdir -p /usr/share/java
将mysql-connector-java-8.0.18.jar重命名为mysql-connector-java.jar :
在node0中有已经上传的mysql-connector-java-8.0.18.jar
mv mysql-connector-java-8.0.18.jar mysql-connector-java.jar
将mysql-connector-java.jar移动或复制到每个节点的/user/share/java:
-
cp mysql-connector-java.jar
/usr/share
/java/
-
scp mysql-connector-java.jar
node1:
/usr/share
/java/
-
...
CentOS 7 已经启用chronyd服务保证时间同步,不需要再安装ntpd,查看chronyd状态。
systemctl status chronyd
解压mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz
tar Jxvf mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz
查询出来已安装的Mariadb:
Mariadb相关知识:Mariadb
rpm -qa|grep mariadb
卸载Mariadb,文件名为上述命令查询出来的文件 :
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
重命名:
-
mv mysql-8.0.18-linux-glibc2.12-x86_64 mysql
-
mv mysql /usr/local
创建数据目录:
用来保存MySQL数据
mkdir /usr/local/mysql/data
创建并编辑my.cnf文件:
vi /etc/my.cnf
填入以下内容
-
[client]
-
port=
3306
-
socket=
/tmp/mysql.
sock
-
[mysqld]
-
port=
3306
-
user=mysql
-
socket=
/tmp/mysql.
sock
-
basedir=
/usr/local/mysql
-
datadir=
/usr/local/mysql/data
-
log-error=
/usr/local/mysql/error.
log
-
pid-file =
/usr/local/mysql/mysql.
pid
-
transaction_isolation =
READ-
COMMITTED
-
character-set-server = utf8
-
collation-server = utf8_general_ci
-
lower_case_table_names =
1
-
sql_mode =
"STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
创建组:
groupadd mysql
创建用户:
useradd -g mysql mysql
此处组和用户的知识点不太清楚,待以后补充‘:Linux 命令整理 groupadd useradd 详解
修改目录权限:
相关知识:Linux中chown和chmod的区别和用法(转)
将 /opt/mysql给予mysql用户
chown -R mysql:mysql /usr/local/mysql
将/opt/mysql权限设置为755(读4写2执行1)
chmod -R 755 /usr/local/mysql
初始化mysql :
-
cd /usr/local/mysql
-
./bin/mysqld --initialize --user=mysql
尝试启动mysql:
-
cd /usr/local/mysql
-
./support-files/mysql.server start
将mysql添加为系统服务:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
设置开机启动:
-
cd /etc/init.d
-
chmod 755 /etc/init.d/mysql
-
chkconfig --add mysql
-
chkconfig --level 345 mysql on
-
service mysql restart
配置环境变量:
-
echo
'export MYSQL_HOME=/usr/local/mysql' >> /etc/profile
-
echo
'export PATH=.:$MYSQL_HOME/bin:$PATH' >> /etc/profile
-
source /etc/profile
使用默认密码登录MySQL:
找到默认密码:
-
cd /usr/local/mysql
-
cat error.log
得到默认密码EyyQoldIr4.?使用默认密码登录,不能在init.d这个路径下输入如下命令,这样会把MySQL当成服务,具体的知识待学习补充,马克一下 Init.d的作用以及如何配置服务自启动(mysql踩坑集锦
mysql -u root -p
在MySQL8中第一次登陆需要重新设置root密码:
ALTER user 'root'@'localhost' IDENTIFIED BY '123456';
开启远程访问:
mysql 创建用户并赋予用户权限详细操作
创建一个root用户,允许任何机器登录
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
允许root用户在任何机器上,访问任何库,任何表(生产中根据情况配置用户和权限)
GRANT ALL ON *.* TO 'root'@'%';
刷新系统权限相关表
Mysql知识点总结:Flush privileges
FLUSH PRIVILEGES;
尝试登录
mysql -u root -p123456
这里选择把yum源配置在node0节点上
这里出现了一点波折,因为之前测试配置本地yum源的时候,在所有节点用系统镜像配置过了本地yum,见文章:配置本地yum源,无法直接按下面的方法安装httpd,所以先把所有节点的yum还原成初始设置,进入/etc/yum.repos.d/,删除修改过的CentOS-Media.repo,进入之前备份的bak文件夹,把备份的.repo拷贝出来。
-
cd /etc/yum.repos.d/
-
rm CentOS-Media.repo
-
cd bak
-
cp CentOS-Media.repo ../
-
ll
然后清空和重建yum的缓存
yum clean yum makecache
之后可以在node0节点按如下步骤安装httpd服务
-
yum install httpd -y
#安装Apache http
-
systemctl start httpd
#启动Apache http
-
systemctl
enable httpd
#开机自启动Apache http
安装完后可通过IP地址访问
在node0节点完成以下操作,创建安装文件http根目录
mkdir -p /var/www/html/cm6
上传文件到http根目录,上传后查看文件
ll /var/www/html/cm6
在浏览器中也可查看服务器http根目录下的文件。
在node0节点完成以下操作
-
cd /
var/www/
html/cm6
-
yum install -y createrepo
-
createrepo .
在所有节点完成以下操作
vim /etc/yum.repos.d/cloudera-manager.repo
-
[cloudera-manager]
-
name=Cloudera Manager
6.3.
1
-
baseurl=http:
//node0/cm6
-
gpgcheck=
0
-
enabled=
1
-
autorefresh=
0
-
type=rpm-md
3.1.5 验证
更新仓库信息,确认本地yum源已被添加
-
yum clean
all
-
yum makecache
3.2.1 安装cm-agent
在所有节点完成以下操作,安装cloudera-manager-agent
执行安装
yum install -y cloudera-manager-agent
执行结果
3.2.2 管理节点安装cm-server
在node0节点完成以下操作,在cm的管理节点(node0)安装 cloudera-manager-server
执行安装
yum install -y cloudera-manager-server
cloudera-manager-server
安装完毕后,会自动创建/opt/cloudera/parcel-repo
目录,将之前下载好的CDH安装包CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
上传到/opt/cloudera/parcel-repo
目录,上传完成后计算校验和
-
cd /opt/cloudera/parcel-repo
-
sha1sum CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel | awk
'{ print $1 }' > CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
在node0节点完成以下操作
-
mysql
-uroot
-p123456
-
create database cmserver
character
set
'utf8';
-
show databases;
-
exit
在node0节点完成以下操作
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql cmserver root 123456
/opt/cloudera/cm/schema/scm_prepare_database.sh 数据库类型 库名 用户 密码
这里有个波折,报时区不一致错误,参考如下文章可解决。
The server time zone value 'EDT' is unrecognized or represents more than one time zone.
在node0节点完成以下操作
启动cm-server服务
systemctl start cloudera-scm-server.service
查看服务运行状态
通过端口监听检查服务启动情况,cm-server默认使用7180端口进行访问
netstat -anp| grep 7180
查看到端口已经正常服务,打开浏览器进入 node0:7180(http://192.168.137.100:7180) (需要配置主机名映射,或者使用ip访问)
账号、密码:admin、admin