搭建CM/CDH6.2.1 环境
环境准备
环境介绍
环境搭建规划
腾讯云服务器 3 台 + CDH 6.2.1 + 华为 Mysql 5.7 + JDK 1.8
应用 | node1 | node2 | node3 |
---|---|---|---|
CM管理服务 | ✔ | ✘ | ✘ |
NameNode | ✔ | ✘ | ✘ |
DataNode | ✔ | ✔ | ✔ |
SecondNameNode | ✘ | ✔ | ✘ |
ResourceManager | ✔ | ✘ | ✘ |
NodeManager | ✔ | ✔ | ✔ |
JobHistory Server | ✔ | ✘ | ✘ |
Zookeeper | ✔ | ✔ | ✔ |
Hive | ✘ | ✘ | ✔ |
Impala | ✔ | ✔ | ✔ |
Oozie | ✘ | ✔ | ✘ |
Hue | ✘ | ✘ | ✔ |
Sqoop | ✔ | ✔ | ✔ |
cloudera-manager-server 和 cloudera-manager-agent 安装规划
节点 | node1 | node2 | node3 |
---|---|---|---|
服务 | cloudera-manager-server cloudera-manager-agent | cloudera-manager-agent | cloudera-manager-agent |
服务器准备
大数据环境中的云服务器必须得通过内网互联,内网互联亲测数据传输可以达到 200M/s
,如果外网互联,访问速度很慢,会很卡。所以各位一定要注意。 我的 3 台服务器为了省钱,用 3 个账号买的,导致一个问题,各位需要留意了:
① 同一个账号的多台服务器腾讯云可以直接内网互连,但是服务器要在同一个地域
② 多账号的服务器内网互连,要使用腾讯云的产品 云联网
,若是同一地域,宽带上限 5GB
,亲测最大传输速度 200MB/s
,主要是免费;如果不是同一地域,需要花钱
不管怎样,一定要内网互连啊!!!!血的教训!!!集群页面访问卡成翔!!!!
节点 | CPU | 内存 | 带宽 | 硬盘 |
---|---|---|---|---|
node1(公网1.117.160.1 内网172.17.10.14) | 2 | 8G | 2M | 50 |
node2(公网1.117.160.2 内网172.17.20.18) | 2 | 4G | 2M | 50 |
node3(公网1.117.160.3 内网172.17.30.23) | 2 | 4G | 2M | 50 |
服务器安全组配置
node1 安全组配置
来源 | 协议端口 | 策略 | 说明 |
---|---|---|---|
133.142.6.0/24 | ALL | 允许 | 只对我本机所在的网段开放,其他人不能访问 |
172.17.20.0/24 | ALL | 允许 | 对 node2 整个网段开放 |
172.17.30.0/24 | ALL | 允许 | 对 node3 整个网段开放 |
0.0.0.0/24 | ALL | 拒绝 | 不然任何人都可以访问,服务器很容易被攻击 |
node2 安全组配置
来源 | 协议端口 | 策略 | 说明 |
---|---|---|---|
133.142.6.0/24 | ALL | 允许 | 只对我本机所在的网段开放,其他人不能访问 |
172.17.10.0/24 | ALL | 允许 | 对 node1 整个网段开放 |
172.17.30.0/24 | ALL | 允许 | 对 node3 整个网段开放 |
0.0.0.0/24 | ALL | 拒绝 | 不然任何人都可以访问,服务器很容易被攻击 |
node3 安全组配置
来源 | 协议端口 | 策略 | 说明 |
---|---|---|---|
133.142.6.0/24 | ALL | 允许 | 只对我本机所在的网段开放,其他人不能访问 |
172.17.10.0/24 | ALL | 允许 | 对 node1 整个网段开放 |
172.17.20.0/24 | ALL | 允许 | 对 node2 整个网段开放 |
0.0.0.0/24 | ALL | 拒绝 | 不然任何人都可以访问,服务器很容易被攻击 |
CM 部署准备
修改 hostname
# 注:修改是为了让操作更简单
# 只演示 node1 的,剩余两台依次为 node2、node3,同样操作做一遍
# node1
vim /etc/hostname
# 增加以下内容
node1
# 重启生效
shutdown -r now
修改 hosts 文件
# 3 台都这么做
vim /etc/hosts
# 追加如下内容
172.17.10.14 node1
172.17.20.18 node2
172.17.30.23 node3
# 在你的本地电脑上配置成这样,这样你就可以通过浏览器直接输入hostname访问,记住你通过你本地电脑访问的始终是公网
# 我的电脑是 Mac,Windows的对应自己的方式配置,此处不赘述
1.117.160.1 node1
1.117.160.2 node2
1.117.160.3 node3
SSH 免密登陆
参考这篇文章中的操作,翻到 SSH 免密登陆那一节
开发常用的Linux命令_半吊子Kyle的博客-CSDN博客
关闭防火墙(云服务器可忽略)
参考这篇文章中的操作,翻到关闭防火墙那一节
开发常用的Linux命令_半吊子Kyle的博客-CSDN博客
关闭 SELINUX(云服务器可忽略)
参考这篇文章中的操作,翻到 关闭SELINUX 那一节
开发常用的Linux命令_半吊子Kyle的博客-CSDN博客
配置 NTP 时钟同步(云服务器可忽略)
参考这篇文章中的操作,翻到时钟同步那一节
开发常用的Linux命令_半吊子Kyle的博客-CSDN博客
CM安装部署
安装 JDK(3台)
① 别有太多疑问,也别乱配,这里只能这么配置,不然会报错
# jdk 的安装目录:只能装在这里,否则会报错
cd /usr
mkdir java
# 将 jdk 压缩包放在这个文件夹下
/usr/java
# 解压
tar -zxvf jdk-8u172-linux-x64.tar.gz
② 配置环境变量
# 进入到该目录下
cd /etc/profile.d/
# 创建环境变量文件
vim java.sh
# 增加以下内容
export JAVA_HOME=/usr/java/jdk1.8.0_172
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
# 刷新环境变量
source java.sh
# 验证
java -version
本地yum源搭建及配置
① CDH 离线镜像包下载
为什么要用离线的,而且还要自己搭建镜像源:因为在线的 yum 源开始有权限校验了,你搞不定的
② 搭建本地 yum 源
我把 node1 当作镜像源服务器了,所以在 node1 上搭建
# 1.node1上操作
mkdir -p /var/www/html
# 2.上传离线镜像包到 /var/www/html 目录下
# 3.解压压缩包 cloudera-repos.tar.gz 到 /var/www.html 路径下
tar -zxvf cloudera-repos.tar.gz -C /var/www/html
# 4.进入 /var/www/html 路径,开启 http 服务
# 启动后,新开个窗口继续操作
python -m SimpleHTTPServer 8900
# 3.浏览器访问,这就是你本地做域名映射的好处
node1:8900
③ 修改节点的 yum 源配置文件
# 1.node1 操作
vim /etc/yum.repos.d/cloudera-manager.repo
# 2.增加以下内容
[cloudera-manager]
name=cloudera-manager
baseurl=http://node1:8900/cloudera-repos/cm6/6.2.1/redhat7/yum/
gpgcheck=0
enabled=1
# 3.在 node1 上将修改后的配置文件分发到另外两台机器上
scp /etc/yum.repos.d/cloudera-manager.repo node2:/etc/yum.repos.d/cloudera-manager.repo
scp /etc/yum.repos.d/cloudera-manager.repo node3:/etc/yum.repos.d/cloudera-manager.repo
CM安装
① 安装
# node1 上执行
yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
# node2、node3 上执行
yum install cloudera-manager-daemons cloudera-manager-agent
② 修改CM配置文件
# 分别修改 3 台机器的Agent配置信息
vim /etc/cloudera-scm-agent/config.ini
# 修改以下内容
server_host=node1
server_port=7182
Mysql 及驱动安装
① mysql 安装
忽略,我用的是云 mysql,没有的话就本地装一个
② 驱动安装
# 1.只需要node1操作:上传 mysql 的驱动到该目录下,cloudera-manager-server初始化数据使用
/opt/cloudera/cm/lib
# 2.集群中的3台都操作
cd /usr/share
mkdir java
# 3.上传驱动到该文件夹下,并且重命名,必须要修改
mv /usr/share/java/mysql-connector-java-8.0.20.jar /usr/share/java/mysql-connector-java.jar
③ mysql 用户权限设置
-- 赋权
grant all PRIVILEGES on *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
grant all PRIVILEGES on *.* TO 'root'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;
grant all PRIVILEGES on *.* TO 'root'@'hadoop01' IDENTIFIED BY '123456' WITH GRANT OPTION;
-- 刷新权限
flush privileges;
④ 创建数据库
-- cloudera-manager 用到的数据库
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
-- 监控服务用到的数据库
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
-- hue 用到的数据库
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
-- hive 用到的数据库
CREATE DATABASE hive DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
-- oozie 用到的数据库
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CM初始化数据
-- 本地数据库:设置元数据库为mysql--前提是安装ClouderaManager Server服务
/opt/cloudera/cm/schema/scm_prepare_database.sh -h localhost mysql scm root 123456
-- 远程数据库:依次为主机名 数据库类型 数据库名称 用户名称 密码
/opt/cloudera/cm/schema/scm_prepare_database.sh -h 133.245.23.23 mysql scm root 123456
-- 旧版本CM
/usr/share/cmf/schema/scm_prepare_database.sh -h localhost mysql scm root 123456
CM启动
① 启动 cloudera-manager-server
# node1 执行
systemctl start cloudera-scm-server
② 启动 cloudera-manager-agent
# 3 台全部启动 Agent 节点
systemctl start cloudera-scm-agent
③ Pacels 重命名
# 进入目录
cd /var/www/html/cloudera-repos/cdh6/6.2.1/parcels/
# 文件重命名
mv ./CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel.sha1 ./CDH-6.2.1-1.cdh6.2.1.p0.1425774-el7.parcel.sha
④ 其它操作命令(可选用,查看启动状态及日志,排查错误)
# server 启动状态查看
systemctl status cloudera-scm-server
# agent 启动状态查看
systemctl status cloudera-scm-agent
# server 启动日志查看
/var/log/cloudera-scm-server/cloudera-scm-server.log
# agent 启动日志查看
/var/log/cloudera-scm-agent/cloudera-scm-agent.log
# 日志配置
/etc/cloudera-scm-server/log4j.properties
# server 进程查看
netstat -an | grep 7180
CDH 应用部署
创建集群
① 登陆页面,访问地址:http://node1:7180/cmf/login
,用户名密码都是 admin
② 第一次登陆后的主页面
③ 选择 CDH 版本
④ 跳转到了集群创建页面
⑤ 选择指定的主机
这里需要注意,之所以能显示出来 3 台服务器,是因为我们在这 3 台服务器手动安装了 cloudera-manager-agent
并且启动了 agent
这么做就是为了方便,省的每一台都要在页面添加一遍,后续添加服务器可以直接通过 add host
进行操作
⑥ 设置存储库
# 注意,别输错了,否则的话不能显示 CDH 版本,不能继续下一步
http://node1:8900/cloudera-repos/cdh6/6.2.1/parcels
⑦ 集群检查
将以上步骤做完后,跳转到应用服务页面,如下
服务部署
① 服务部署界面
② 选择的服务:可以根据自己的需求选择
③ 角色分配页面:即哪个服务器装哪几个应用
④ 设置数据库
注意:如果 mysql
驱动器没有按照指定的要求放置的话,这里测试是会报错的
如果你的 mysql
装在了本地,比如 node1
,那 Database Hostname
就填 node1
;我的 mysql
是华为的产品,所以我填的是 ip
⑤ 安装
安装的时候问题可能会有点多,出了问题可以重试一下或者退回去几步,重新来一下。如果还是不能解决,可以看一下安装常见的问题
安装常见的问题
CM初始化数据错误
① 无法连接
错误详情:
[ main] DbCommandExecutor ERROR Error when connecting to database.
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
解决方法:
检查初始化命令中的 ip
数据库名称
用户名、密码
是否正确,通过连接工具能否成功连接
② 驱动找不到
错误详情:
ERROR JDBC Driver com.mysql.jdbc.Driver not found
解决方法:
上传 mysql
的驱动到 /opt/cloudera/cm/lib
目录下
Server启动失败
错误详情:
systemctl status cloudera-scm-server
● cloudera-scm-server.service - Cloudera CM Server Service
Loaded: loaded (/usr/lib/systemd/system/cloudera-scm-server.service; enabled; vendor preset: disabled)
Active: failed (Result: start-limit) since Tue 2021-07-06 18:26:32 CST; 2min 21s ago
Process: 13734 ExecStart=/opt/cloudera/cm/bin/cm-server (code=exited, status=1/FAILURE)
Main PID: 13734 (code=exited, status=1/FAILURE)
解决办法:
jdk
没有安装在指定的目录,参考这篇文档中的 jdk
安装,如果 jdk
路径没问题,多看下日志,对应问题对应解决