CDH6大数据集群离线安装

前言

为什么要用离线的方式安装CDH6大数据集群

CDH,全称Cloudera’s Distribution, including Apache Hadoop。是Hadoop众多分支中对应中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建,提供了Hadoop的核心(可扩展存储、分布式计算),最为重要的是提供基于web的用户界面。

CDH的优点:版本划分清晰,更新速度快,支持Kerberos安全认证,支持多种安装方式(如Yum、rpm等)。

Cloudera公司最近在官网宣布:

从2021年1月31日开始,所有Cloudera软件都需要有效的订阅,并且只能通过付费墙进行访问。

在这里插入图片描述

也就是说CDH各版本都不能免费获取了。很多以前的文章、书籍中提到CDH大数据平台,都是会引用Cloudera官网下载地址,例如:https://archive.cloudera.com/cm6/6.2.0/redhat7/yum/RPMS/x86_64/

现在开始要输入账号密码认证了。用Cloudera的账号密码的话,会得到如下失败信息:

403 Forbidden (varnish) the provided credentials were incorrect

说明没有权限获取CDH了。在Cloudera官网社区里有很多讨论。

解决办法如下:

  1. 使用开源的Hadoop、Spark、Hive等分别安装;

  2. 使用自己或别人以前下载过的CDH安装包,共享使用,官网说的是CDH6.6以后收费,以前的还是可以使用。

链接: https://pan.baidu.com/s/1ION1DoWnqpfVO_sBx0GpeA 提取码: rqyi

下载安装包

CDH分为Cloudera Manager管理平台和CDH parcel(parcel包含各种组件的安装包)。

从共享的百度网盘链接将CDH安装包下载到本地工作机,如下所示:

~/workspace$ 
tree CDH
CDH
├── CDH
│  ├── CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
│  ├── CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha1
│  ├── CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha256
│  └── manifest.json
├── ClouderaManager
├── cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm
├── cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm
├── cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm
├── cloudera-manager-server-db-2-6.3.1-1466458.el7.x86_64.rpm
├── enterprise-debuginfo-6.3.1-1466458.el7.x86_64.rpm
└── oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm

编辑映射文件

root@cdh001:~# vim /etc/hosts

在该文件中添加如下内容:

172.18.48.175  cdh001.gary.com    cdh001
172.18.48.176  cdh002.gary.com    cdh002
172.18.48.177  cdh003.gary.com    cdh003

配置SSH免密登录

1.执行以下命令,创建公钥和私钥。

ssh-keygen -t rsa

2.将公钥拷贝到要免密登录的目标机器上

将公钥拷贝到本机

for node in cdh001 cdh002 ...; do 
    ssh-copy-id -i ~/.ssh/id_rsa.pub $node
done

编写集群分发脚本

1.需求:循环复制文件到所有节点的相同目录下 2.需求分析: (a)期望脚本使用方法:

xsync <要同步的文件路径>

3.脚本实现 (a)在/root目录下创建bin目录,并在bin目录下xsync创建文件,操作如下:在该文件中编写如下代码

#!/bin/bash
#1获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0));then
    echo no args;
    exit;
fi
#2获取文件路径
p1=$1
fname=`basename $p1`
echo fname=$fname
#3获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1);pwd
echo pdir=$pdir
#4获取当前用户名称
user=`whoami`
#5循环
for((num=2;num<4;num++));do
    host=$(printf "%03d" "$num")
    echo -------------------cdh$host--------------
    rsync -rvl $pdir/$fname $user@cdh$host:$pdir
done

(b)修改脚本xsync具有执行权限

chmod u+x xsync

(c)调用脚本形式:

xsync <文件路径>

(d)分发集群分发脚本

xsync /usr/local/bin/xsync

(e)分发映射文件

xsync /etc/hosts

安装MySQL(主节点)

下载并安装mysql

下载并安装

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server

启动服务

systemctl start mysqld

查看状态

systemctl status mysqld

查看mysql临时密码

grep "password" /var/log/mysqld.log
# 2021-04-15T07:31:51.264538Z 1 [Note] A temporary password is generated for root@localhost: LeuhBAe2ai,u

登录后修改密码

尽量复杂一点,太简单了验证不通过,也可以查看如何关闭mysql校验规则

[root@cdh001 ~]# mysql -u root -p
mysql> set global validate_password_policy=0; 
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=4;
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Mysql@gang2019';
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

重启服务并设置开机启动

systemctl enable mysqld && systemctl restart mysqld

下载并安装JDBC 驱动

要求使用5.1.26以上版本的jdbc驱动,可点击这里直接下载mysql-connector-java-5.1.47.tar.gz

wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.47.tar.gz
tar -xzf mysql-connector-java-5.1.47.tar.gz 
mkdir -p /usr/share/java
ln -s /usr/share/mysql-connector-java-5.1.47/mysql-connector-java-5.1.47-bin.jar /usr/share/java/mysql-connector-java.jar

创建CDH所需要的数据库

根据所需要安装的服务参照下表创建对应的数据库以及数据库用户,数据库必须使用utf8编码,创建数据库时要记录好用户名及对应密码:

服务名数据库名用户名密码
Cloudera Manager ServerscmscmCDH@gang2019
Activity MonitoramonamonCDH@gang2019
Reports ManagerrmanrmanCDH@gang2019
HuehuehueCDH@gang2019
Hive Metastore ServermetastorehiveCDH@gang2019
Sentry ServersentrysentryCDH@gang2019
Cloudera Navigator Audit ServernavnavCDH@gang2019
Cloudera Navigator Metadata ServernavmsnavmsCDH@gang2019
OozieoozieoozieCDH@gang2019

创建sql脚步文件

vim cdhinit.sql

添加内容如下:

# scm
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'CDH@gang2019';
# amon
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY 'CDH@gang2019';
# rman
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY 'CDH@gang2019';
# hue
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; 
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'CDH@gang2019';
# hive
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY 'CDH@gang2019';
# sentry
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;  
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY 'CDH@gang2019';
# nav
CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;   
GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY 'CDH@gang2019';
# navms
CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY 'CDH@gang2019';
# oozie
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'CDH@gang2019';
# flush
FLUSH PRIVILEGES;
SHOW DATABASES;

修改mysql密码校验策略

[root@cdh001 ~]# mysql -u root -p
mysql> set global validate_password_policy=LOW; 
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=6;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_check_user_name    |  OFF  |
| validate_password_dictionary_file    |       |
| validate_password_length             |   6   |
| validate_password_mixed_case_count   |   1   |
| validate_password_number_count       |   1   |
| validate_password_policy             |  LOW  |
| validate_password_special_char_count |   1   |
+--------------------------------------+-------+
7 rows in set (0.00 sec)

运行脚本

mysql> source /root/cdhinit.sql
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
.....
13 rows in set (0.00 sec)

配置Cloudera Manager yum库(主节点)

首先安装httpd和createrepo:

yum -y install httpd createrepo

启动httpd服务并设置开机自启动:

systemctl enable --now httpd

将上传的CDH安装包移到httpd的html目录下:

mv CDH/ /var/www/html/

生成RPM元数据:

cd /var/www/html/CDH/ClouderaManager/
createrepo .

接着再创建ClouderaManager的repo文件

vim /etc/yum.repos.d/cloudera-manager.repo

添加如下内容:

[cloudera-manager]
name=Cloudera Manager 6
baseurl=http://cdh001/CDH/ClouderaManager/
gpgcheck=0
enabled=1

分发

xsync /etc/yum.repos.d/cloudera-manager.repo

修改/etc/httpd/conf/httpd.conf配置文件:

把第284行的 AddType application/x-gzip .gz .tgz 修改为 AddType application/x-gzip .gz .tgz .parcel

重启httpd服务

systemctl restart httpd

安装JDK(所有节点)

yum install oracle-j2sdk1.8

设置环境变量

vim /etc/profile.d/cdh.sh

添加如下内容:

#java
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib

环境变量生效

source /etc/profile.d/cdh.sh
java -version

分发配置文件

xsync /etc/profile

安装Cloudera Manager

安装Cloudera Manager Server (主节点)
yum install cloudera-manager-server
安装Cloudera Manager Agent(所有节点)
./sync_cluster.sh cmd "yum install cloudera-manager-daemons cloudera-manager-agent -y"
修改agent配置,指向Server节点cdh001 (所有节点)
sed -i "s/server_host=localhost/server_host=cdh01/g" /etc/cloudera-scm-agent/config.ini
xsync /etc/cloudera-scm-agent/config.ini
启动 agent 服务(所有节点)
systemctl start cloudera-scm-agent

初始化scm数据库

/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm 'CDH@gang2019'

启动Cloudera Manager Server(主节点)

systemctl start cloudera-scm-server
systemctl status cloudera-scm-server

查看启动日志

tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log

看到下面的信息,说明启动完成

2021-04-15 16:11:08,771 INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty server.

安装CDH集群

通过浏览器访问Cloudera Manager WEB界面

打开浏览器,访问地址:http://<server_host>:7180,默认账号和密码都为admin在这里插入图片描述

欢迎页面

首先是Cloudera Manager的欢迎页面,点击页面右下角的【继续】按钮进行下一步: 在这里插入图片描述

接受条款

勾选接受条款,点击【继续】进行下一步:

版本选择

这里选择免费版: 在这里插入图片描述

第二个欢迎界面

选择版本以后会出现第二个欢迎界面,不过这个是安装集群的欢迎页: 在这里插入图片描述

设置群集名称

在这里插入图片描述

选择主机

这一步是要选择用于安装CDH集群的主机: 在这里插入图片描述

选择存储库

CDH and other software

点击更多选项添加远程Parcel存储库:http://39.108.122.82/CDH/CDH/ 在这里插入图片描述

Fix: 在阿里云服务器上url应该改为http://cdh001/CDH/CDH/,采用公网ip会限速

返回后会加载出CDH版本,确认无误后点击【继续】: 在这里插入图片描述

Install Parcels

在这里插入图片描述

主机检查

等待检查完成即可: 在这里插入图片描述

选择服务类型

这里我选择Data Engineering Process, develop, and serve predictive models. 服务: HDFS、YARN(含 MapReduce 2)、ZooKeeper、Oozie、Hive、Hue 和 Spark

在这里插入图片描述

角色分配

CDH会自动给出一个角色分配,如果觉得不合理,我们可以手动调整一下,注意角色分配均衡:

在这里插入图片描述

Gateway Roles https://docs.cloudera.com/documentation/enterprise/5-9-x/topics/cm_mc_managing_roles.html#managing_roles__section_scv_ywt_cn

数据库设置

在这里插入图片描述

审核更改

在这里插入图片描述

等待命令执行完成

在这里插入图片描述

安装完成

在这里插入图片描述

进入监控界面

在这里插入图片描述

组件配置

Spark

安装目录:

SPARK_HOME=/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/spark

配置目录:

/etc/spark/conf                   # CDH分发配置目录
$SPARK_HOME/../../etc/spark/conf  # 内置默认配置目录

Web配置

输入spark-conf过滤设置项,在展示的相应设置项中配置spark-env.shspark-defaults.conf中的选项。客户端配置在Gateway Default Group中。

export PYSPARK_PYTHON=/opt/miniconda3/envs/dataproc/bin/python
export PYSPARK_DRIVER_PYTHON=/opt/miniconda3/envs/dataproc/bin/python

注意在最后一行添加换行,防止生成的配置文件格式不正确。export语句在一行,且worker上未生效。

如果界面配置环境变量不生效,在代码中加入:

import os
os.environ["PYSPARK_PYTHON"]='/opt/miniconda3/envs/dataproc/bin/python'

Kafka集成

spark-streaming-kafka:离线环境默认缺少spark-streaming-kafka-0-8-assembly,手动添加到SPARK_HOME并在集群中同步。

spark-sql-kafka