ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版
0、组网。
(1)买千兆以上路由器+六类以上网线+每台机器两块千兆网卡+4台物理机。
(2)用路由器连接集群机器,配置ip,路由器wan端,即后面配置机器时候的网关ip。(我个人配置成了10.10.10.1)
(3)配置物理机网络。我是用的vmware虚拟机作为节点的,就以这样为例,先设置了物理机系统ip分别为10.10.10.10,10.10.10.11,10.10.10.12,10.10.10.13。
(4)配置vmware虚拟网络。首先:
选择虚拟网络编辑器:
打开更改设置。
选择添加桥接模式,桥接到内网连接的那块网卡,这样就可以统一到内网ip上。
1、主节点安装桌面版centos7,从节点安装mini最小版,这样方便主节点开发,从节点占用小。安装前注意:
(1)定义好网卡名称。我统一名称规则为:
sparkMasterNode , sparkComputeNode1, sparkComputeNode2 sparkComputeNode3,这里定义了就省了安装好之后更改。
(2)定义root用户密码,方便使用4台用一样的就行。
(3)新建一个spark用户,用来作为安装软件的用户。
2、(可选)选择一个可以给centos系统上传文件的方式:xftp、xshell下的rz ,sz命令(yum install lrzsz)、vmware tools。
vmware tools安装步骤:
(1)选择vmware菜单“虚拟机” --> “重新安装vmware tools”;
(2)挂载光盘。打开主节点终端。
创建挂载目录:
mkdir -p /mnt/cdrom
挂载光盘到挂载目录:
mount /dev/cdrom /mnt/cdrom
(3)拷贝其中的tar.gz包(就一个)至其他安装目录。命令:
cp -r /mnt/cdrom 目标目录(自己选)
(4)卸载光盘。
umount /dev/cdrom
(5)解压已经拷贝出来的tar.gz包。命令:
tar -zxvf ****.tar.gz包
(6)进入解压开的目录中,运行其中的install.sh脚本。命令:
./install.sh
一路回车(有个需要询问gcc的 ,yes or no的,选择no吧,选择了gcc一直询问,没仔细看,可能是我缺gcc吧,选no最后也不影响使用)
(7)完成。重启一下就可以直接拖动文件至主节点了。
3、配置网络名称与网卡。
(1)网络名称在安装的时候就可以定义了。参见第一步。
(2)修改网卡配置文件,我这里共四台虚拟机作为节点,ip分别设置为:
10.10.10.100,10.10.10.101,10.10.10.102,10.10.10.103。
vi /etc/sysconfig/network-scripts/ifcfg-ens33
(我这个是连接外网的网卡)
这个文件只需要需改为:ONBOOT="yes"。设置开机自启。
vi /etc/sysconfig/network-scripts/ifcfg-ens34
(我这个是连接内网的网卡)
这个内网的文件需要设置静态ip,内容如下:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens34
UUID=fcbc86ce-4095-432d-8970-a58448e1f8ee
DEVICE=ens34
ONBOOT=yes
IPADDR=10.10.10.***
PREFIX=24
GATEWAY=10.10.10.1
(3)重启集群节点使其ip生效。
4、卸载自带jdk(所有节点),安装自己下载的jdk
(1)查询是否安装了jdk:
rpm -qa | grep java
rpm -qa | grep jdk
(2)把查询出来的包都卸载:
rpm -e --nodeps 查出来的所有包(用空格隔开)
(3)安装自己的jdk,使用xftp将jdk传到各台机器的安装路径上。解压:
tar -zxcf jdk-8u191-linux-x64.tar.gz
(4)在配置系统环境变量:
vi /etc/profile
在其中"export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL"
前面添加:
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
使其生效:
source /etc/profile
(5)验证:
5、配置hosts文件(所有节点)
vi /etc/hosts
添加内容:
10.10.10.100 sparkMasterNode
10.10.10.101 sparkComputeNode1
10.10.10.102 sparkComputeNode2
10.10.10.103 sparkComputeNode3
6、配置spark用户sudo权限
vi /etc/sudoers
在"root ALL=(ALL) ALL"下面添加:
spark ALL=(root)NOPASSWD:ALL
7、配置ssh免密码登录(所有节点)
(1)ssh免密码登录就是公私钥配对以登录。
(2)切换到spark用户
su spark
(3)所有节点执行
ssh-****** -t rsa
一路回车
(4)我这里为了直接统一手动的将四台机器使用了同一个公私钥对。xshell可以生成公私钥对。
(5)删除id_rsa原来内容,复制生成的私钥内容至id_rsa中;删除id_rsa.pub原来内容,复制生成的公钥内容至id_rsa.pub中
(6)生成authorized_keys文件
cat id_rsa.pub >> authorized_keys
(7)修改authorized_keys文件权限
chmod 600 authorized_keys
(8)测试是否可以免密码
ssh sparkComputeNode1
ssh sparkComputeNode2
ssh sparkComputeNode3
8、关闭防火墙与selinux(所有节点)
查看防火墙状态:
systemctl status firewalld.service
执行关闭命令:
systemctl stop firewalld.service
执行开机禁用防火墙自启命令 :
systemctl disable firewalld.service
临时关闭SELinux :
setenforce 0
临时打开SELinux :
setenforce 1
开机关闭SELinux :
编辑/etc/selinux/config文件,将SELINUX的值设置为disabled
9、安装Apache web服务器(仅主节点)
连接外网:
yum install httpd
打开httpd与设置自启动:
systemctl start httpd
systemctl enable httpd
10、配置本地yum源库repo。
(1)使用CentOS-7-x86_64-Everything-1708.iso作为库(仅主节点)。
(2)接入光盘。挂载复制,参考安装vmware时的操作(仅主节点)。
(3)复制其中内容到Apache web服务器的目录下(/var/www/html/),我的库绝对路径是:/var/www/html/localRepo/CentOS。(仅主节点)
(4)从浏览器查看网址:http://10.10.10.100/localRepo/CentOS/
(5)配置repo库文件。(所有节点)
cd /etc/yum.repos.d/
删除其中的所有文件:
rm -rf *
新建native.repo文件,填入内容:(注意名称一致)
[native]
name=native
baseurl=http://sparkMasterNode/localRepo/CentOS/
enabled=1
gpgcheck=0
清除原来repo库缓冲,新建缓冲:
yum clean all
yum makecache
11、(可选)安装vim。(ps:vi界面太难看了)
yum install vim
12、配置时间同步
(1)安装时间同步服务
yum install ntp
(2)开启与自启
systemctl start ntpd
systemctl enable ntpd
(3)配置ntpd配置文件(/etc/ntp.conf)
vim /etc/ntp.conf
1> 主节点配置文件修改内容:
替换原来server中内容为:
server ntp1.aliyun.com
server ntp2.aliyun.com
server ntp3.aliyun.com
server ntp4.aliyun.com
server ntp5.aliyun.com
server ntp6.aliyun.com
server ntp7.aliyun.com
server 127.127.1.0
fudge 127.127.1.0 stratum 10
添加一行:
restrict 10.10.10.0 mask 255.255.255.0 nomodify notrap
ip根据自己网段填写
2> 从节点配置文件修改内容:
替换原来server中内容为:
server sparkMasterNode
添加一行:
restrict 10.10.10.0 mask 255.255.255.0 nomodify notrap
(4)重启ntpd服务
systemctl restart ntpd
13、clouder-manager安装包准备
(1)安装文件下载(我的版本是5.15.0,自行抉择,不过几个包要版本完全匹配)
http://archive.cloudera.com/cm5/installer/5.15.0/
(2)clouder-manager安装包
http://archive.cloudera.com/cm5/repo-as-tarball/5.15.0/
我是centos7所以选择下载cm5.15.0-centos7.tar.gz
(3)安装包有了,使用自己搭建的Apache web服务器,模拟在线安装cm,即将cm包解压到/var/www/html/ 的特定路径(子路径和在线搭建的子路径要完全一致,参考下面中的repo文件内容)下,几台机器配置这个web路径的repo源,参考上面配置本地yum源。(在线安装路径是:http://archive.cloudera.com/cm5/redhat/7/x86_64/cm/5/)模拟具体过程如下:
1> 先在/opt/ 目录下新建softwares目录用来放置cm安装包。
mkdir -p /opt/softwares
2>上传cloudera-manager-installer.bin与cm5.15.0-centos7.tar.gz两个文件至该目录
3>修改softwares及其子文件的权限与用户:
sudo chown -R spark:spark /opt/
4>解压至Apache web目录下的指定目录下
sudo tar -zxvf /opt/softwares/cm5.15.0-centos7.tar.gz -C /var/www/html/cm5/redhat/7/x86_64
5>cloudera-manager.repo文件(路径还是/etc/yum.repos.d/):
[cloudera-manager]
name=cloudera-manager
baseurl=http://sparkMasterNode/cm5/redhat/7/x86_64/cm/5/
enabled=1
gpgcheck=0
(解释:其中的7是只centos7,centos也使用redhat的路径名,如果是ubuntu,或者不同的centos版本得注意修改)
清除原来repo库缓冲,新建缓冲:
yum clean all
yum makecache
14、给予权限执行安装脚本
cd /opt/softwares
chmod 777 cloudera-manager-installer.bin
./cloudera-manager-installer.bin
安装日志目录:
/var/log/cloudera-manager-installer
等待安装完成
打开10.10.10.100:7180登录界面,可能需要分钟,第一次打开需要初始化。如何查看初始化完成呢?可以查看日志:
/var/log/cloudera-scm-server/cloudera-scm-server.log
滚动查看日志命令:
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
15、clouderaManager安装完成:
默认用户密码:admin/admin
16、cdh-parcels文件准备
(1)下载文件。包括三个文件,我的版本对应文件为:
CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel
CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha1
manifest.json
下载的地址是:http://archive.cloudera.com/cdh5/parcels/5.15.0/
根据自己的系统版本与cloudera-manager版本自行选择对应版本下载。
(2)特别注意,需要将CDH-5.15.0-1.cdh5.15.0.p0.21-el7.parcel.sha1中的后缀1去掉。
(3)用自己Apache web模拟在线安装。方式参考上面。在/var/www/html路径下新建parcels文件夹,将上述三个文件拷贝进这个文件夹中,浏览器上测试是否可用:
http://sparkmasternode/parcels/
如果在windows物理机上测试,得需要配置hosts映射
17、开始安装CDH,添加各服务
(1)登录,选择免费版,继续,继续。
(2)搜索主机
hostname 注意空格隔开
搜索
继续。
(3)配置cdh库路径与cm客户端包库路径。
打开更多选项:
删除原来所有Parcel存储库URL,添加第16步中的URL地址:
http://sparkmasternode/parcels/
保存更改。
这时下面的CDH版本已经根据读到的库更新了:
选择Cloudera Manager Agent特定发行版,选中自定义,填入第13步建立的cloudera-manager repo库的地址:
http://sparkmasternode/cm5/redhat/7/x86_64/cm/5/
点击继续。
(4)选择不安装jdk,继续,不启用单用户,继续。
(5)选择ssh用户。选择其他用户,选择上面建立ssh免密码登录的spark用户,身份验证方法选择所有主机接收相同私钥,选择文件,选择ssh免密码登录时使用的私钥文件。继续。
(6)开始安装
等待安装完成
这里发现这里我自己本机这台虚拟机安装失败了,(注意:报了错之后不要关闭当前页面,修改完错误直接从当前页面重试就好,剩的后续麻烦)。看一下详细信息:
发现这里需要的httpd的版本不对,是因为上面注明安装httpd时直接默认安装了新版httpd,那我们这里卸载一下原来的httpd,下次安装时选择完整版本号安装。因为我们的repo源是挂在了apache web下了,如果我们卸载了httpd那么就无法访问到源而无法安装新的httpd了,这里需要给主机另外先临时配置一下源,直接选择CentOS-7-x86_64-Everything-1708.iso包挂载后的文件夹作为yum源。
挂载:
mount /dev/cdrom /mnt/cdrom
设置临时的repo源:
cd /etc/yum.repos.d
先将其中的repo文件修改文件名:
mv cloudera-manager.repo cloudera-manager.repo.bak
mv native.repo native.repo.bak
新建repo文件:
touch temNative.repo
加入如下内容:
[temNative]
name=temNative
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
清除yum缓存,新建缓存
yum clean all
yum makecache
这时,查询原来的httpd包:
rpm -qa |grep httpd
卸载这两个:
rpm -e --nodeps httpd-2.4.6-88.el7.centos.x86_64 httpd-tools-2.4.6-88.el7.centos.x86_64
安装上面提到的版本:
yum install httpd-2.4.6-67.el7.centos
查询当前版本,已经对应:
再设置httpd开启与自启:
systemctl start httpd
systemctl enable httpd
再将原来的cloudera-manager.repo , native.repo两个repo文件名修改回来,将temNative.repo删掉或者加后缀改掉,重新清除yum缓存,建立缓存:
mv cloudera-manager.repo.bak cloudera-manager.repo
mv native.repo.bak native.repo
mv temNative.repo temNative.repo.bak
yum clean all
yum makecache
重试安装成功。继续。
等待CDH安装分配完成。继续。
主机检查。
主要一个是虚拟机存在交换区的问题,将交换区关闭
sudo sysctl vm.swappiness=0
修改系统变量
sudo vim /etc/sysctl.conf
向其中添加
vm.swappiness=0
重新检查
swapping的问题已经解决。
再解决透明大页面的问题,执行页面上提示执行的命令:
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
再修改/etc/rc.local 自启动文件,在其中加入上面两行代码。重新运行检查。
问题已经解决。点击完成。完成后进入添加组件的页面,先不添加,点击左上角
返回主页。
(7)配置CDH jdk,添加组件。
1> 配置jdk
2> 安装监控:Cloudera Management Service服务
右上角添加Cloudera Management Service,选择角色安装主机,我这里选择安装到了主节点sparkMasterNode上了。后面一路默认下一步,直到完成。
3> 添加各项服务,zookeeper,HDFS,Yarn,其中的ZooKeeperServer,Namenode,resourceManager,JobHistoryServer我都选择了sparkMasterNode节点。
HDFS有用户权限,可以关闭。关闭方式如图:
重启HDFS生效。
(8)集成spark2。官方指导:
https://www.cloudera.com/documentation/spark2/latest/topics/spark2_installing.html
1> 准备csd包与parcel包
下载目录:
http://archive.cloudera.com/spark2/csd/
我下载的是SPARK2_ON_YARN-2.3.0.cloudera4.jar版本
parcel包:
http://archive.cloudera.com/spark2/parcels/2.3.0.cloudera4/
同样对应版本包是
SPARK2-2.3.0.cloudera4-1.cdh5.13.3.p0.611179-el7.parcel
SPARK2-2.3.0.cloudera4-1.cdh5.13.3.p0.611179-el7.parcel.sha
manifest.json
注意:下载对应版本,我的CentOS7,所以下载el7的包,若是CentOS6,就要下el6的包。
2> 开始安装
上传CSD包到所有机器的/opt/cloudera/csd目录。修改文件的用户和组为cloudera-scm:cloudera-scm,修改权限为644。如果本目录下有其他的jar包,把删掉或者移到其他目录。
chown cloudera-scm:cloudera-scm SPARK2_ON_YARN-2.3.0.cloudera4.jar
chmod 644 SPARK2_ON_YARN-2.3.0.cloudera4.jar
上传 SPARK2-2.3.0.cloudera4-1.cdh5.13.3.p0.611179-el7.parcel
SPARK2-2.3.0.cloudera4-1.cdh5.13.3.p0.611179-el7.parcel.sha
manifest.json
到机器sparkMasterNode的/opt/cloudera/parcel-repo目录***意:将 SPARK2-2.3.0.cloudera4-1.cdh5.13.3.p0.611179-el7.parcel.sha1重命名为SPARK2-2.3.0.cloudera4-1.cdh5.13.3.p0.611179-el7.parcel.sha。如果有其他的安装包,不用删除 ,但是如果本目录下有其他的重名文件比如manifest.json文件,把它重命名备份掉。然后把那3个parcel包的文件放在这里。
重启CM服务以及重启集群,点击主机->Parcel页面,看是否多了个spark2的选项。如下图,你这里此时应该是分配按钮,点击,等待操作完成后,点击**按钮。
cd /etc/rc.d/init.d/
所有机器:
./cloudera-scm-agent restart
仅sparkMasterNode:
./cloudera-scm-server restart
ps:cm的服务命令在/etc/rc.d/init.d/目录下
这时就可以添加spark2.x了,如图:
添加,大功告成!spark集群搭建完毕。
注:添加spark2部分参考了:
作者:HarSenZhao
原文:https://blog.csdn.net/Johnzhc/article/details/81698525