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虚拟网络。首先:
ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

选择虚拟网络编辑器:

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

打开更改设置。

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

选择添加桥接模式,桥接到内网连接的那块网卡,这样就可以统一到内网ip上。

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

 

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)验证:

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

 

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

等待安装完成

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

打开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安装完成:

http://10.10.10.100:7180/

默认用户密码:admin/admin

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

 

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 注意空格隔开

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

搜索

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

继续。

(3)配置cdh库路径与cm客户端包库路径。

打开更多选项:

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

删除原来所有Parcel存储库URL,添加第16步中的URL地址:

http://sparkmasternode/parcels/

保存更改。

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

 

这时下面的CDH版本已经根据读到的库更新了:

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

选择Cloudera Manager Agent特定发行版,选中自定义,填入第13步建立的cloudera-manager repo库的地址:

http://sparkmasternode/cm5/redhat/7/x86_64/cm/5/

点击继续。

 

(4)选择不安装jdk,继续,不启用单用户,继续。

(5)选择ssh用户。选择其他用户,选择上面建立ssh免密码登录的spark用户,身份验证方法选择所有主机接收相同私钥,选择文件,选择ssh免密码登录时使用的私钥文件。继续。

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

 

(6)开始安装

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

等待安装完成

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

 

这里发现这里我自己本机这台虚拟机安装失败了,(注意:报了错之后不要关闭当前页面,修改完错误直接从当前页面重试就好,剩的后续麻烦)。看一下详细信息:

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

发现这里需要的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

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

 

这时,查询原来的httpd包:

rpm -qa |grep httpd

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

卸载这两个:

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

查询当前版本,已经对应:

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

 

再设置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

 

重试安装成功。继续。

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

 

 

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

等待CDH安装分配完成。继续。

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

主机检查。

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

主要一个是虚拟机存在交换区的问题,将交换区关闭

sudo sysctl vm.swappiness=0

修改系统变量

sudo vim /etc/sysctl.conf

向其中添加

vm.swappiness=0

重新检查

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

swapping的问题已经解决。

 

再解决透明大页面的问题,执行页面上提示执行的命令:

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

再修改/etc/rc.local 自启动文件,在其中加入上面两行代码。重新运行检查。

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

问题已经解决。点击完成。完成后进入添加组件的页面,先不添加,点击左上角

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

返回主页。

 

(7)配置CDH jdk,添加组件。

1> 配置jdk

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

 

 

 

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

2> 安装监控:Cloudera Management Service服务

右上角添加Cloudera Management Service,选择角色安装主机,我这里选择安装到了主节点sparkMasterNode上了。后面一路默认下一步,直到完成。

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

3> 添加各项服务,zookeeper,HDFS,Yarn,其中的ZooKeeperServer,Namenode,resourceManager,JobHistoryServer我都选择了sparkMasterNode节点。

HDFS有用户权限,可以关闭。关闭方式如图:

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

 

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

重启HDFS生效。

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

(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版本

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

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

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

注意:下载对应版本,我的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了,如图:

ClouderaManager搭建Spark on yarn(spark 2.x)集群最详尽版

添加,大功告成!spark集群搭建完毕。

 

注:添加spark2部分参考了:

作者:HarSenZhao

原文:https://blog.csdn.net/Johnzhc/article/details/81698525