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官网社区里有很多讨论。
解决办法如下:
-
使用开源的Hadoop、Spark、Hive等分别安装;
-
使用自己或别人以前下载过的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 Server | scm | scm | CDH@gang2019 |
Activity Monitor | amon | amon | CDH@gang2019 |
Reports Manager | rman | rman | CDH@gang2019 |
Hue | hue | hue | CDH@gang2019 |
Hive Metastore Server | metastore | hive | CDH@gang2019 |
Sentry Server | sentry | sentry | CDH@gang2019 |
Cloudera Navigator Audit Server | nav | nav | CDH@gang2019 |
Cloudera Navigator Metadata Server | navms | navms | CDH@gang2019 |
Oozie | oozie | oozie | CDH@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.sh
和spark-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
: