CDH5.16.1+Spark2.4集群部署

前言

CDH是Hadoop发行版的一种,是一套目前比较完整的、充分测试的Hadoop及其相关项目的发行版,其提供了Hadoop的核心元素:可扩展的存储和分布式计算以及基于Web的用户界面和重要的企业功能,本文主要针对CDH集群的部署以及部署过程中可能出现的问题作了相关描述。

准备工作

1.系统环境

  • 操作系统:CentOS Linux release 7.5.1804 (Core) / 3.10.0-862.el7.x86_64
  • 主机角色

主机名

ip地址

部署服务

cdh-01

192.168.110.43

MySQL5.7,jdk1.8,mysql-jdbc,cloudera-scm-server,cloudera-scm-agent

cdh-02

192.168.110.44

jdk1.8,cloudera-scm-agent

cdh-03

192.168.110.45

jdk1.8,cloudera-scm-agent

2.目录规划

#cm server及agent
mkdir -p /opt/cloudera-manager

#离线parcel源
mkdir -p /opt/cloudera/parcel-repo

#CDH软件安装⽬录
mkdir -p /opt/cloudera/parcels 

#jdk目录,CDH5默认识别的jdk路径为:/usr/java/default,后续需要做软连接,优先直接安装到此路径(hue启动报错查阅资料得知)
mkdir -p /usr/local/java

#mysql jdbc目录,cm server默认会到此目录寻找jdbc(cm server启动jdbc报错查阅资料得知)
mkdir -p /usr/share/java/

#Spark2的csd目录
mkdir -p /opt/cloudera/csd

3.系统优化

  • 建议将/proc/sys/vm/swappiness设置为最⼤值10。
  • swappiness值控制操作系统尝试交换内存的积极;
  • swappiness=0:表示最⼤限度使⽤物理内存,之后才是swap空间;
  • swappiness=100:表示积极使⽤swap分区,并且把内存上的数据及时搬迁到swap空间;
  • 如果是混合服务器,不建议完全禁⽤swap,可以尝试降低swappiness。
#临时修改:
sysctl vm.swappiness=10
cat /proc/sys/vm/swappiness
#永久修改:
echo 'vm.swappiness=10'>> /etc/sysctl.conf
  • 已启⽤透明⼤⻚⾯压缩,可能会导致重⼤性能问题,建议禁⽤此设置。
#临时修改:
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled

#永久修改:
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local

#centos7.x系统,需要为"/etc/rc.d/rc.local"⽂件赋予执⾏权限
chmod +x /etc/rc.d/rc.local

集群节点初始化

1.系统环境初始化

1.1.修改集群hostname
hostnamectl set-hostname cdh-01
hostnamectl set-hostname cdh-02
hostnamectl set-hostname cdh-03
1.2.当前笔记本或台式机配置hosts⽂件
  • MAC: /etc/hosts
  • Window: C:\windows\system32\drivers\etc\hosts

公⽹地址:

192.168.110.43 cdh-01

192.168.110.44 cdh-02

192.168.110.45 cdh-03

1.3.设置所有节点的hosts⽂件私有地址、内⽹地址
echo "192.168.110.43 cdh-01">> /etc/hosts
echo "192.168.110.44 cdh-02">> /etc/hosts
echo "192.168.110.45 cdh-03">> /etc/hosts
1.4.关闭所有节点的防⽕墙及清空规则
systemctl stop firewalld 
systemctl disable firewalld
iptables -F
1.5.关闭所有节点的selinux
#临时关闭
setenforce 0
#永久关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
1.6.设置所有节点的时区⼀致及时钟同步
  • 时区
#查看哪些时区
[root@cdh-01 ~]# timedatectl list-timezones
#所有节点设置亚洲上海时区
[root@cdh-01 ~]# timedatectl set-timezone Asia/Shanghai
  • 时间
#所有节点安装ntp
[root@cdh-01 ~]# yum install -y ntp
#选取cdh-01为ntp的主节点
[root@cdh-01 ~]# vim /etc/ntp.conf
#time
server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
server 3.asia.pool.ntp.org
#当外部时间不可⽤时,可使⽤本地硬件时间
server 127.127.1.0 iburst local clock 
#允许哪些⽹段的机器来同步时间
restrict 192.168.110.0 mask 255.255.255.0 nomodify notrap

#开启ntpd
[root@cdh-01 ~]# systemctl start ntpd
[root@cdh-01 ~]# systemctl enable ntpd
#验证
[root@cdh-01 ~]# ntpq -p
#其他从节点停⽌禁⽤ntpd服务
[root@cdh-02 ~]# systemctl stop ntpd
[root@cdh-02 ~]# systemctl disable ntpd
[root@cdh-02 ~]# /usr/sbin/ntpdate cdh-01
#每天凌晨同步cdh-01节点时间
[root@cdh-01 ~]# crontab -e
00 00 * * * /usr/sbin/ntpdate cdh-01

2.各节点基础依赖安装

#没有psmisc的pstree命令cm-server会启动报错
yum install -y vim wget psmisc 

#python连接hive
yum install -y cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-gssapi  cyrus-sasl-md5   

3.部署集群的JDK

mkdir -p /usr/local/java
tar -xzvf jdk-8u45-linux-x64.gz -C /usr/local/java/
#切记必须修正所属⽤户及⽤户组
chown -R root:root /usr/local/java/jdk1.8.0_45
echo "export JAVA_HOME=/usr/local/java/jdk1.8.0_45" >> /etc/profile
echo "export PATH=\${JAVA_HOME}/bin:\${PATH}" >> /etc/profile
source /etc/profile
which java

4.主节点部署mysql5.7

4.1.mysql5.7安装
[root@cdh-01 ~]# vim /etc/yum.repos.d/mysql57.repo
# Enable to use MySQL 5.7
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[root@cdh-01 ~]# yum makecache
[root@cdh-01 ~]# yum -y install mysql mysql-server
[root@cdh-01 ~]# systemctl start mysqld
#修改密码
[root@cdh-01 ~]# grep "temporary" /var/log/mysqld.log
2021-07-06T07:36:21.522719Z 1 [Note] A temporary password is generated for root@localhost: V,vi>&we=2c=
2021-07-06T07:36:24.070680Z 0 [Note] InnoDB: Creating shared tablespace for temporary tables
[root@cdh-01 ~]# mysql -uroot -p
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=6;
mysql> set password for 'root'@'localhost'=password('DtDream01');
mysql> exit
[root@cdh-01 ~]# vim /etc/my.cnf
character_set_server=utf8
init_connect='SET NAMES utf8'
[root@cdh-01 ~]# systemctl restart mysqld
[root@cdh-01 ~]# systemctl enable mysqld
4.2.创建CDH数据库以及用户
[root@cdh-01 ~]# mysql -uroot -p DtDream01
mysql> create database cmf DEFAULT CHARACTER SET utf8;
mysql> create database amon DEFAULT CHARACTER SET utf8;
mysql> create database hive DEFAULT CHARACTER SET utf8;
mysql> create database oozie DEFAULT CHARACTER SET utf8;
mysql> create database hue DEFAULT CHARACTER SET utf8;
mysql> grant all on cmf.* TO 'cmf'@'%' IDENTIFIED BY 'DtDream$cdh01';
mysql> grant all on amon.* TO 'amon'@'%' IDENTIFIED BY 'DtDream$cdh01';
mysql> grant all on hive.* TO 'hive'@'%' IDENTIFIED BY 'DtDream$cdh01';
mysql> grant all on oozie.* TO 'oozie'@'%' IDENTIFIED BY 'DtDream$cdh01';
mysql> grant all on hue.* TO 'hue'@'%' IDENTIFIED BY 'DtDream$cdh01';
mysql> flush privileges;

5.主节点部署mysql jdbc jar

#CDH默认到/usr/share/java/下寻找jdbc
mkdir -p /usr/share/java/
cp /root/cdh5.16.1/mysql-connector-java-5.1.47.jar /usr/share/java/mysql-connector-java.jar

CDH安装部署

1.离线部署cm server及agent

1.1.所有节点创建⽬录及解压
mkdir -p /opt/cloudera-manager
tar -zxvf cloudera-manager-centos7-cm5.16.1_x86_64.tar.gz -C /opt/cloudera-manager

1.2.所有节点修改agent的配置,指向server的节点cdh-01
sed -i "s/server_host=localhost/server_host=cdh-01/g" /opt/cloudera-manager/cm-5.16.1/etc/cloudera-scm-agent/config.ini

1.3.主节点修改server的配置:
vim /opt/cloudera-manager/cm-5.16.1/etc/cloudera-scm-server/db.properties 
com.cloudera.cmf.db.type=mysql
com.cloudera.cmf.db.host=cdh-01
com.cloudera.cmf.db.name=cmf
com.cloudera.cmf.db.user=cmf
com.cloudera.cmf.db.password=DtDream$cdh01
com.cloudera.cmf.db.setupType=EXTERNAL

1.4.所有节点创建⽤户
useradd --system --home=/opt/cloudera-manager/cm-5.16.1/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm

1.5.⽬录修改⽤户及⽤户组
chown -R cloudera-scm:cloudera-scm /opt/cloudera-manager

2.cdh-01节点部署离线parcel源

2.1.部署离线parcel源
mkdir -p /opt/cloudera/parcel-repo
cp CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel /opt/cloudera/parcel-repo/
#切记cp时,重命名去掉1,不然在部署过程CM认为如上⽂件下载未完整,会持续下载
cp CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel.sha1 /opt/cloudera/parcel-repo/CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel.sha
cp manifest.json /opt/cloudera/parcel-repo/
2.2.⽬录修改⽤户及⽤户组
chown -R cloudera-scm:cloudera-scm /opt/cloudera/

3.所有节点创建软件安装⽬录、⽤户及⽤户组权限

mkdir -p /opt/cloudera/parcels 
chown -R cloudera-scm:cloudera-scm /opt/cloudera/

4.cdh-01节点启动Server

4.1.启动server
/opt/cloudera-manager/cm-5.16.1/etc/init.d/cloudera-scm-server start
4.2.阿⾥云web界⾯,设置该cdh-01节点防⽕墙放开7180端⼝
4.3.等待1min,打开 http://cdh-01:7180 账号密码:admin/admin
4.4.假如打不开,去看server的log,根据错误仔细排查错误

5.所有节点启动Agent

/opt/cloudera-manager/cm-5.16.1/etc/init.d/cloudera-scm-agent start

6.登录web界⾯操作

http://192.168.110.43:7180/

账号密码:admin/admin

6.1.勾选最终⽤户许可条款与条件

6.2.选择部署Cloudera Express免费版本

6.3.感谢您选择Cloudera Manager和CDH
  • 继续下一步

6.4.为CDH集群安装指定主机
  • 选择[当前管理的主机],全部勾选

6.5.选择存储库

6.6.集群安装
  • 报错主机运行状况不良

  • 解决办法
#删除agent目录下面的cm_guid文件,并重启失败节点的agent服务重新生成恢复
#cm_guid文件的内容大概是uuid,用于唯一标示agent隶属于哪一个server,和之前部署各个节点后又重新初始化server有关
rm -f /opt/cloudera-manager/cm-5.16.1/lib/cloudera-scm-agent/cm_guid
/opt/cloudera-manager/cm-5.16.1/etc/init.d/cloudera-scm-agent restart

6.7.检查主机正确性
  • 存在风险信息

  • 解决办法
临时调整:
sysctl vm.swappiness=10

echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled

永久调整:
echo 'vm.swappiness=10'>> /etc/sysctl.conf

echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
6.8.自定义服务

6.9.自定义角色分配
  • 注意:hive,Activity Monitor,Oozie Server,Hue依赖mysql,需要运行在有jdbc的节点上

6.10.集群数据库设置
  • 问题:CDH添加Hue服务时,验证数据库连接报错 Unexpected error. Unable to verify database connection.

  • 排查:查看CDH服务节点日志

tail -n 200 /opt/cloudera-manager/cm-5.16.1/log/cloudera-scm-server/cloudera-scm-server.log

  • 问题原因:因为我们的mysql是重新安装的,服务器重新安装mysql的同时,会删除系统原来的mysql,此时会连带着删除 libmysqlclient.s0.18 文件
  • 解决方法:
1.找一台未装过mysql的服务器,然后把 /usr/lib64/mysql/ 下面的 libmysqlclient.so.18.0.0 文件拷贝到此服务器的这个目录
[root@cdh-01 ~]# scp root@192.168.110.44:/usr/lib64/mysql/libmysqlclient.so.18.0.0 /usr/lib64/mysql/
2.在 /usr/lib64/mysql/ 目录下对 libmysqlclient.so.18.0.0 做软连接
[root@cdh-01 ~]# ln -s /usr/lib64/mysql/libmysqlclient.so.18.0.0 /usr/lib64/mysql/libmysqlclient.so.18
3.在 /etc/ld.so.conf 文件后追加 /usr/lib64/mysql
[root@cdh-01 ~]# vim /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/lib64/mysql
4.运行 ldconfig 命令,让其生效
ldconfig
  • 重新测试连接

6.11.集群设置,默认即可

6.12.首次运行命令
  • 问题:当使用CDH增添spark服务的时候,出现了以下错误:Faile to deploy client configuration to the cluster.

  • 排查:查阅资料可能是jdk的问题,这里需要强调一下CDH5默认识别的jdk路径为:/usr/java/default
  • 解决方法:将jdk的路径使用软连接的方式将jdk映射到default中
mkdir -p /usr/java/default/
ln -s /usr/local/java/jdk1.8.0_45/* /usr/java/default/
  • 重新运行,全部成功

6.13.首页报错
  • 问题:hue的load-banlance进程未启动,报错与服务器通信出错

  • 解决方法:安装依赖yum -y install mod_ssl httpd,并重启hue

Spark2.4安装部署

1.概述

  • 经查阅官方文档,发现spark1.6和2.x是可以并行安装的,也就是说可以不用删除默认的1.6版本,可以直接安装2.x版本,它们各自用的端口也是不一样的。
  • 所需安装包如下:

csd包:SPARK2_ON_YARN-2.4.0.cloudera2.jar

parcel包:SPARK2-2.4.0.cloudera2-1.cdh5.13.3.p0.1041012-el7.parcel

SPARK2-2.4.0.cloudera2-1.cdh5.13.3.p0.1041012-el7.parcel.sha

manifest_CDH5.json

3.开始安装

3.1.上传CSD包到CM节点的/opt/cloudera/csd目录, 并修改权限
mkdir -p /opt/cloudera/csd
cd /root/spark2.4
cp SPARK2_ON_YARN-2.4.0.cloudera2.jar /opt/cloudera/csd
chown cloudera-scm:cloudera-scm /opt/cloudera/csd/SPARK2_ON_YARN-2.4.0.cloudera2.jar
3.2.上传parcel的3个包到CM的/opt/cloudera/parcel-repo目录下
cd /root/spark2.4
cp SPARK2-2.4.0.cloudera2-1.cdh5.13.3.p0.1041012-el7.parcel /opt/cloudera/parcel-repo
#原文件名后缀为sha1, 去掉1
cp SPARK2-2.4.0.cloudera2-1.cdh5.13.3.p0.1041012-el7.parcel.sha1 /opt/cloudera/parcel-repo/SPARK2-2.4.0.cloudera2-1.cdh5.13.3.p0.1041012-el7.parcel.sha
#manifest.json是安装所需依赖包的清单文件,此目录下已经有cdh的,需要将以前的先改名后上传
mv /opt/cloudera/parcel-repo/manifest.json /opt/cloudera/parcel-repo/manifest_CDH5.json
cp manifest.json /opt/cloudera/parcel-repo

4.重启CM和集群

/opt/cloudera-manager/cm-5.16.1/etc/init.d/cloudera-scm-server restart
/opt/cloudera-manager/cm-5.16.1/etc/init.d/cloudera-scm-agent restart

5.通过CM安装Spark2

5.1.CM页面-> 主机 -> Parcel页面可以看到新的spark2的parcel包,点击“分配”, 完成后点击“激活”

5.2.添加服务Spark2
  • 首页下拉栏点击添加服务

  • 勾选Spark2,点击继续

  • 为Spark2选择依赖关系

  • Spark2主机角色分配

  • 默认不勾选,不启用TLS,点击继续,一直往下完成即可

配置Spark默认使用Python3

1.安装anaconda3

wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh
#一路回车,yes,如果不想将anaconda默认安装在/root/anaconda3目录下,可以修改
sh Anaconda3-2019.10-Linux-x86_64.sh
#修改环境变量
echo "export CONDA_HOME=/usr/local/anaconda3" >> /etc/profile
echo "export PATH=\${CONDA_HOME}/bin:\${PATH}" >> /etc/profile
source /etc/profile
which python3

2.CDH修改PySpark默认的Python版本

spark2-配置-搜索"spark-env.sh"-填写python路径-保存更改

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值