基于CentOS7的CDH6.3.2完全分布式集群搭建[商业版]

写在前面

距离上一次写 CDH集群搭建的文档已经一年多了,今年2月份开始Cloudera全面下架了免费的安装包下载渠道,很多朋友在集群搭建的过程中按照之前的老文档遇到了一些问题。今天重新整理一次文档。

  • Cloudera官网公告 file

  • 未订阅授权的用户无法使用 CDH6.3.3和之后的版本 file

  • 所以我们继续使用 CDH6.3.2版本进行集群搭建

  • 需要使用的朋友可以先浏览 CDH6.3.2对应的组件版本,是否符合需求

组件版本发行版CDH 版本
Flume NG 1.9.0+cdh6.3.2 1605554 CDH 6.3.2
Hadoop 3.0.0+cdh6.3.2 1605554 CDH 6.3.2
HDFS 3.0.0+cdh6.3.2 1605554 CDH 6.3.2
HttpFS 3.0.0+cdh6.3.2 1605554 CDH 6.3.2
hadoop-kms 3.0.0+cdh6.3.2 1605554 CDH 6.3.2
MapReduce 2 3.0.0+cdh6.3.2 1605554 CDH 6.3.2
YARN 3.0.0+cdh6.3.2 1605554 CDH 6.3.2
HBase 2.1.0+cdh6.3.2 1605554 CDH 6.3.2
Lily HBase Indexer 1.5+cdh6.3.2 1605554 CDH 6.3.2
Hive 2.1.1+cdh6.3.2 1605554 CDH 6.3.2
HCatalog 2.1.1+cdh6.3.2 1605554 CDH 6.3.2
Hue 4.2.0+cdh6.3.2 1605554 CDH 6.3.2
Impala 3.2.0+cdh6.3.2 1605554 CDH 6.3.2
Kafka 2.2.1+cdh6.3.2 1605554 CDH 6.3.2
kudu 1.10.0+cdh6.3.2 1605554 CDH 6.3.2
Oozie 5.1.0+cdh6.3.2 1605554 CDH 6.3.2
Parquet 1.9.0+cdh6.3.2 1605554 CDH 6.3.2
Pig 0.17.0+cdh6.3.2 1605554 CDH 6.3.2
sentry 2.1.0+cdh6.3.2 1605554 CDH 6.3.2
Solr 7.4.0+cdh6.3.2 1605554 CDH 6.3.2
spark 2.4.0+cdh6.3.2 1605554 CDH 6.3.2
Sqoop 1.4.7+cdh6.3.2 1605554 CDH 6.3.2
ZooKeeper 3.4.5+cdh6.3.2 1605554 CDH 6.3.2

一、外环境准备

1.1、文件准备

  • 将所需要的包下载到本地(10个文件包)

文件名称文件大小(字节)
allkeys.asc 14,041
CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel 2,082,186,246
cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm 10,483,568
cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm 1,203,832,464
cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm 11,488
cloudera-manager-server-db-2-6.3.1-1466458.el7.x86_64.rpm 10,996
enterprise-debuginfo-6.3.1-1466458.el7.x86_64.rpm 14,209,868
mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz 503,854,832
mysql-connector-java-8.0.18.jar 2,330,539
oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm 184,988,341

 

1.2、服务器准备

1.2.1 集群规划

  • CDH 集群相较于 Apache开源版本,最大优势在于 Cloudera Manager强大便捷的集群管理服务,所以CM几乎是必装的,换句话说不装CM就没必要用 CDH版本的Hadoop了

  • 但在实测中,即使只启动 CM的必要服务,集群的整体资源占用就已经达到了8GB

  • 集群架构方案

    • 方案一:3台或以上,8G内存或以上,将cm的集群监控服务分散到多个节点

    主机名服务
    node01 cm-agent、cm-server、hadoop and other
    node02 cm-agent、Host Monitor、Service Monitor、hadoop and other
    node03 cm-agent、Alert Publisher、Event Server、hadoop and other
    • 方案二:4台或以上,8G内存或以上,将cm的集群监控服务全部安装在一台节点

    主机名服务
    node01 cm-agent、cm-server、Host Monitor、Service Monitor、Alert Publisher、Event Server
    node02 cm-agent、hadoop and other
    node03 cm-agent、hadoop and other
    node04 cm-agent、hadoop and other
  • 本例使用上述架构二

主机名CPU核心物理内存操作系统服务
node00 4 8GB CentOS 7 cm-server、cm-agent、其他cm监控服务
node01 4 8GB CentOS 7 cm-agent、hadoop生态组件
node02 4 8GB CentOS 7 cm-agent、hadoop生态组件
node03 4 8GB CentOS 7 cm-agent、hadoop生态组件

 

1.2.2 服务器准备

  • 学习测试

    • VMWare、VirtualBox等虚拟机

    • AWS、阿里云、华为云、腾讯云等云服务器

  • 生产环境

    • 物理服务器(购买)

    • AWS、阿里云、华为云、腾讯云等云服务器(租用)

      • 按量计费:启动服务器时开始扣费,用完挂起,会以极低的费用保管数据,需要使用再次开机计费

 

 

二、内环境准备

2.1 配置主机名和映射

  • ⚠ CDH需要使用IPv4地址,暂不支持IPv6

  • ⚠ CDH建议使用FQDN,即完全限定域名

    # 普通hostname
    node00
    # FQDN(Fully Qualified Domain Name---)
    node00.cdh6.amoscloud.com

2.1.1 配置主机名

  • 为每个机器单独配置自己的主机名

# 第一台机器执行
hostnamectl set-hostname node00.cdh6.amoscloud.com
# 第二台机器执行
hostnamectl set-hostname node01.cdh6.amoscloud.com
# 第三台机器执行
hostnamectl set-hostname node02.cdh6.amoscloud.com
# 第四台机器执行
hostnamectl set-hostname node03.cdh6.amoscloud.com

2.1.2 配置FQDN

  • 为每个机器单独配置自己的FQDN

▲此处开启多屏操作

1、将主机名赋给变量
HOST=`hostname`

2、检查变量
echo $HOST

3、将变量名写入对应文件
echo $HOST > /etc/sysconfig/network

2.1.3 配置本地DNS映射

  • 为每个机器配置 /etc/hosts文件

echo -e "
172.16.6.121 node00.cdh6.amoscloud.com node00
172.16.6.122 node01.cdh6.amoscloud.com node01
172.16.6.123 node02.cdh6.amoscloud.com node02
172.16.6.124 node03.cdh6.amoscloud.com node03
" >> /etc/hosts

# -e 表示识别转义字符(例:/n)

注:CDH 集群中为提高其安全性,不配置免密登录,其主从节点中的 cm-server与 cm-agent实现免密功能,即调用机制

2.1.4 顺便配置 Windows映射

1、打开编辑 win系统中的 hosts文件,路径如下
C:\Windows\System32\drivers\etc\hosts

2、在文件中写入内容
172.16.6.121 node00.cdh6.amoscloud.com node00
172.16.6.122 node01.cdh6.amoscloud.com node01
172.16.6.123 node02.cdh6.amoscloud.com node02
172.16.6.124 node03.cdh6.amoscloud.com node03

 

2.2 关闭防火墙

▲ 每个节点都要完成以下操作

▲ 此处开启多屏操作

2.2.1 关闭防火墙服务

# 临时
systemctl stop firewalld

# 永久
systemctl disable firewalld
# 执行结果
[root@node00 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

# 双管齐下,无需重启

2.2.2 查看防火墙状态

systemctl status firewalld

#执行结果
确认 Active: inactive (dead)
关闭OK

 

2.3 暂时关闭 SELinux

▲ 每个节点都要完成以下操作

▲此处开启多屏操作

2.3.1 查看 SELinux状态

# 查看 SELinux状态命令
getenforce
  • 执行结果

[root@node00 ~]# getenforce
Enforcing
  • 如果执行结果打印 Permissive 或者 Disabled ,可以直接跳过 2.3 步骤,如果是 Enforcing继续操作

2.3.2 修改 SELinux状态

# 临时修改(无需重启)
setenforce 0

# 永久修改
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
  • 执行结果

[root@node00 ~]# getenforce
Permissive

 

2.4 时间同步

  • CentOS 7 已经启用chronyd服务保证时间同步,不需要再安装ntpd

2.4.1 查看 chronyd状态

▲ 每个节点都要完成以下操作

▲此处开启多屏操作

systemctl status chronyd

#执行结果
确认 Active: active (running)
状态OK

开启时间同步
systemctl start chronyd

 

2.5 搭建本地 yum源

  • 我这里选择把yum源配置在 node00节点上

2.5.1 安装并启动Apache http

▲ 在node00节点完成以下操作

  • 安装 Apache http

    yum install -y httpd
  • 启动 Apache http

    systemctl start httpd
  • 设置自启动 Apache http

    systemctl enable httpd

2.5.2 上传安装文件

▲ 在 node00节点完成以下操作

  • 创建安装文件 http根目录

    mkdir -p /var/www/html/cm6
  • 上传安装文件(1.1准备的10个文件)到http根目录(刚创建的目录 /cm6)

此处上传10个文件到 /cm6目录下

2.5.3 创建 yum仓库

▲ 在node00节点完成以下操作

1、
cd /var/www/html/cm6

2、
yum install -y createrepo

3、
createrepo .

2.5.4 配置 yum仓库文件

▲ 在所有节点完成以下操作

▲ 此处开启多屏操作

1、创建文件
vim /etc/yum.repos.d/cloudera-manager.repo

2、在文件内写入下面内容
[cloudera-manager]
name=Cloudera Manager 6.3.1
baseurl=http://node00/cm6
gpgcheck=0
enabled=1
autorefresh=0
type=rpm-md

    #    node00/cm6 为2.5.2中创建的目录

2.5.5 更新仓库信息,确认本地 yum源已被添加

# 清理缓存
yum clean all

# 重新建立缓存
yum makecache
  • 执行结果

[root@node02 ~]# yum makecache
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
* base: mirrors.163.com
* extras: mirrors.163.com
* updates: mirrors.163.com
base                                             | 3.6 kB     00:00
cloudera-manager                                 | 2.9 kB     00:00
extras                                           | 2.9 kB     00:00
updates                                           | 2.9 kB     00:00
(1/13): base/7/x86_64/group_gz                     | 153 kB   00:01
(2/13): cloudera-manager/filelists_db               | 118 kB   00:01
(3/13): cloudera-manager/other_db                   | 1.0 kB   00:00
(4/13): cloudera-manager/primary_db                 | 8.6 kB   00:01
(5/13): extras/7/x86_64/filelists_db               | 227 kB   00:01
(6/13): extras/7/x86_64/other_db                   | 136 kB   00:01
(7/13): extras/7/x86_64/primary_db                 | 227 kB   00:06
(8/13): updates/7/x86_64/filelists_db               | 3.9 MB   00:06
(9/13): base/7/x86_64/primary_db                   | 6.1 MB   00:16
(10/13): updates/7/x86_64/other_db                 | 516 kB   00:08
(11/13): base/7/x86_64/other_db                     | 2.6 MB   00:24
(12/13): base/7/x86_64/filelists_db                 | 7.2 MB   00:27
(13/13): updates/7/x86_64/primary_db               | 6.5 MB   00:56
元数据缓存已建立

 

2.6 安装 Mysql

  • 我这里选择把 mysql安装在 node00节点上

2.6.1 上传 mysql安装包并使用脚本自动安装

▲在 node00节点完成以下操作

  • 2.5.2 已上传

  • 在包目录创建脚本文件

vim anzhuangmysql.sh
  • 在文件中写入

#!/bin/bash
echo -e "\033[4;40;31m欢迎使用mysql离线安装自动化脚本 v1.0\033[0m"
echo -e "\033[4;40;31m作者:Amos QQ:410507803 E-Mail:amos@amoscloud.com\033[0m\n"

read -p "请输入mysql8的zx压缩包文件所在路径(eg:/opt/mysql8.xxx.xz):" FILE_PATH
read -p "请输入想要安装的目录(eg:/usr/local/mysql):" DEST_PATH

rpm -e --nodeps $(rpm -qa | grep mariadb)

echo -e "\033[40;32m   (1/13)正在解压,请耐心等待解压过程约1-3分钟... \033[0m"
tar Jxf $FILE_PATH -C .
echo -e "\033[40;32m   解压完成 \033[0m"

echo -e "\033[40;32m   (2/13)移动加压后的文件到$DEST_PATH \033[0m"
mv mysql-8*x86_64 $DEST_PATH

echo -e "\033[40;32m   (3/13)添加环境变量$DEST_PATH \033[0m"
echo "export MYSQL_HOME=$DEST_PATH" >>/etc/profile
echo 'export PATH=.:$MYSQL_HOME/bin:$PATH' >>/etc/profile
source /etc/profile

echo -e "\033[40;32m   (4/13)创建data目录 \033[0m"
mkdir $DEST_PATH/data

echo -e "\033[40;32m   (5/13)创建my.cnf配置文件 \033[0m"
rm -rf /etc/my.cnf
echo "
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
user=mysql
socket=/tmp/mysql.sock
basedir=$DEST_PATH
datadir=$DEST_PATH/data
log-error=$DEST_PATH/error.log
pid-file = $DEST_PATH/mysql.pid
transaction_isolation = READ-COMMITTED
character-set-server = utf8
collation-server = utf8_general_ci
lower_case_table_names = 1
" > /etc/my.cnf
echo 'sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"' >> /etc/my.cnf

echo -e "\033[40;32m   (6/13)创建mysql组 \033[0m"
groupadd mysql

echo -e "\033[40;32m   (7/13)创建mysql用户并加入mysql组 \033[0m"
useradd -g mysql mysql

echo -e "\033[40;32m   (8/13)修改安装目录权限和所有者 \033[0m"
chown -R mysql:mysql $DEST_PATH
chmod -R 755 $DEST_PATH

echo -e "\033[40;32m   (9/13)初始化mysql \033[0m"
$DEST_PATH/bin/mysqld --initialize --user=mysql

echo -e "\033[40;32m   (10/13)尝试启动mysql \033[0m"
$DEST_PATH/support-files/mysql.server start

echo -e "\033[40;32m   (11/13)将mysqld添加为服务并设置开机自启动 \033[0m"
cp $DEST_PATH/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 345 mysqld on

echo -e "\033[40;32m   (12/13)重启mysql \033[0m"
service mysqld restart

echo -e "\033[40;32m   (13/13)读取临时密码 \033[0m"
TEMP_PW=$(cat $DEST_PATH/error.log | grep 'password' | awk -F' ' '{print $NF}')

echo -e "

\033[40;32m mysql的初始临时密码为:$TEMP_PW \033[0m

\033[40;32m 使用初始密码登录mysql后,您可以使用如下SQL修改初始密码: \033[0m
\033[40;33m ALTER user 'root'@'localhost' IDENTIFIED BY 'a123456'; \033[0m

\033[40;32m 使用如下SQL添加可远程访问的root用户: \033[0m
\033[40;33m CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'a123456'; \033[0m
\033[40;33m GRANT ALL ON *.* TO 'root'@'%'; \033[0m
\033[40;33m FLUSH PRIVILEGES; \033[0m

\033[40;32m  3秒后将使用初始密码登录mysql,感谢您的使用 \033[0m
"

sleep 3

mysql -uroot -p$TEMP_PW
  • 执行脚本

0、执行前列出包名列表,方便2指定安装包
ll

1、执行
bash anzhuangmysql.sh

2、输入mysql8的zx压缩包文件所在路径(复制粘贴)
mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz

3、输入想要安装的目录
/usr/local/mysql

4、等待安装完成

2.6.2 设置 mysql的连接用户和密码

# 安装完成后,直接使用如下命令修改初始密码
ALTER user 'root'@'localhost' IDENTIFIED BY '123456';

2.6.3 建立后续需要的数据库

ALTER user 'root'@'localhost' IDENTIFIED BY '123456';

CREATE DATABASE cmserver CHARACTER SET 'UTF8';
CREATE USER 'cms'@'%' IDENTIFIED WITH mysql_native_password  BY '123456';
GRANT ALL ON cmserver.* TO 'cms'@'%';

CREATE DATABASE metastore CHARACTER SET 'UTF8';
CREATE USER 'hive'@'%' IDENTIFIED WITH mysql_native_password  BY '123456';
GRANT ALL ON metastore.* TO 'hive'@'%';
 
CREATE DATABASE oozie CHARACTER SET 'UTF8';
CREATE USER 'oozie'@'%' IDENTIFIED WITH mysql_native_password  BY '123456';
GRANT ALL ON oozie.* TO 'oozie'@'%';
 
CREATE DATABASE hue CHARACTER SET 'UTF8';
CREATE USER 'hue'@'%' IDENTIFIED WITH mysql_native_password  BY '123456';
GRANT ALL ON hue.* TO 'hue'@'%';
 
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password  BY '123456';
GRANT ALL ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;

2.6.4 上传mysql的jdbc驱动包

▲ 在 node00节点完成以下操作

  • 重命名驱动包,并移动到httpd目录下,方便其他机器下载

mv /var/www/html/cm6/mysql-connector-java-8.0.18.jar /var/www/html/cm6/mysql-connector-java.jar

▲ 在所有节点完成以下操作

▲ 此处开启多屏操作

  • 由于集群中多个服务都需要使用 mysql进行元数据管理,所以这里提前将 mysql的 jdbc依赖为每一个节点准备好

# 递归创建目标目录
mkdir -p /usr/share/java

# 进入目录
cd /usr/share/java

# wget从node00上下载jar
wget http://node00/cm6/mysql-connector-java.jar

 

2.7 安装服务

2.7.1 所有节点安装 JDK和 cm-agent

▲ 在所有节点完成以下操作

▲ 此处开启多屏操作

# 执行安装命令

yum install -y oracle-j2sdk1.8-1.8.0+update181-1.x86_64
yum install -y cloudera-manager-agent

此处安装等待几分钟

2.7.2 管理节点安装 cm-server

▲ 在 node00节点完成以下操作

1、安装执行

# 执行安装命令

yum install -y cloudera-manager-server

此处安装等待一秒钟

2、上传 CDH安装包

1、进入目标目录
cd /opt/cloudera/parcel-repo

2、将 CDH安装包移动到此目录下
mv /var/www/html/cm6/CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel .

3、校验
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

完成后结束安装

 

2.8 初始化 cloudera-manager-server

2.8.1 执行CM初始化脚本

▲ 在 node00节点完成以下操作

/opt/cloudera/cm/schema/scm_prepare_database.sh mysql cmserver cms 123456

   # mysql       数据库类型
   # cmserver   数据库名称
   # cms         对应数据库有登陆权限的用户名
   # 123456     密码

2.8.2 启动cm-server服务

▲ 在 node00节点完成以下操作

  1. 启动cm-server服务

systemctl start cloudera-scm-server.service
  1. 查看服务运行状态

systemctl status cloudera-scm-server.service

# 确认 Active: active (running)
# 代表正常
  1. 通过端口监听检查服务启动情况

  • cm-server默认使用 7180端口进行访问

netstat -anp| grep 7180

▲ 此时若 2. 状态正常,反复执行 3. ,直到出现 4. ,则继续 5. 操作,此处需要等待几分钟

  1. 执行结果

[root@node00 parcel-repo]# netstat -anp| grep 7180
tcp        0      0 0.0.0.0:7180            0.0.0.0:*               LISTEN      92238/java
  1. 打开浏览器进入 node00:7180 (需要配置主机名映射,或者使用ip访问)

  • 出现以下界面代表 Linus部分安装 OK

  • 接下来是图形化界面安装,按照提示安装即可

 

 

  • 默认账号:admin 密码:admin

  • 如果一切顺利,那么恭喜你已经进入上图的页面,别着急,CDH的 Hadoop生态集群搭建才刚刚开始...

  • 感谢您的阅读

 

posted @ 2022-08-25 09:56  科小博  阅读(413)  评论(0)    收藏  举报