Spark集群部署

安装部署规划及说明

示例中使用到的服务器相关参数以及各服务器上的相关组件:

主机IP

主机名称

操作系统

数据存储目录

安装路径

安装组件

192.168.174.101

spark1

centos7 x64

/opt/data

/usr/local/spark

spark master

192.168.174.102

spark2

centos7 x64

/opt/data

/usr/local/spark

spark worker

192.168.174.103

spark3

centos7 x64

/opt/data

/usr/local/spark

spark worker

本案例是在centos7 x64最小安装系统下进行的部署,测试通过。

下载spark安装包以及jdk的安装包

  • 本文档使用的JDK是1.8_131的版本,download

  • 本文档使用的scala是2.11.11的版本,download

  • 本文档使用的spark是2.2.0的版本,官方下载地址如下:download

操作系统的相关设置

本章节的所有操作都是在ROOT用户下进行的。

创建一个非ROOT用户

为了避免有些现场可能以后会回收ROOT权限,我们最好在非ROOT用户下安装,如果在非ROOT用户下能成功,在ROOT下就不会失败。如果条件允许,使用ROOT也不是一件坏事。以下给出创建用户的操作指令(以下操作需在ROOT用户下进行):

创建用户名称

[root@localhost ~]# adduser spark
# 为用户初始化密码
# 为这个用户初始化密码,linux会判断密码复杂度,不过可以强行忽略:
[root@localhost ~]# passwd saprk
更改用户 spark 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

为用户创建数据目录

[root@localhost ~]# mkdir -p /opt/spark/data
[root@localhost ~]# mkdir -p /opt/spark/tmp
[root@localhost ~]# mkdir -p /usr/local/spark

# 将以上创建的文件夹的所有者交给spark用户
[root@localhost ~]# chown -R spark:spark /opt/spark
[root@localhost ~]# chown -R spark:spark /usr/local/spark

关闭防火墙

因为我们要搭建集群,集群之间就会有通信,服务器之间要是有通信,就要有相应的防火墙策略开放,因此我们要将防火墙关闭。以下给关闭防火墙操作命令(在root用户下进行操作):

•      检查防火墙状态
Centos6: [root@localhost~]# service iptables status
Centos7: [root@localhost ~]# systemctl status firewalld.service
如果显示状态不是iptables: Firewall is not running.则需要关闭防火墙

•      关闭防火墙
Centos6:[root@localhost ~]# service iptables stop
Centos7:[root@localhost ~]# systemctl stop firewalld

•      永久关闭防火墙
Centos6:chkconfig iptables off
Centos7:systemctl disable firewalld.serivce

•      再次检查防火墙状态
Centos6: [root@localhost ~]# service iptables status
Centos7:[root@localhost ~]# systemctl status firewalld.service
iptables: Firewall is not running.

关闭SElinux

因为centos的所有访问权限都是有SELinux来管理的,为了避免我们安装中由于权限关系而导致的失败,我们将其关闭,以后跟根据需要进行重新管理。以下给出关闭SELinux的操作命令(在ROOT用户下进行操作):

•      查看SElinux的状态
[root@localhost~]# /usr/sbin/sestatus –v
SELinux status:                 enabled
如果SELinux status参数为enabled即为开启状态,需要进行下面的关闭操作。

•      关闭SElinux
[root@localhost ~]# vim /etc/selinux/config
在文档中找到SELINUX,将SELINUX的值设置为disabled,即:
SELINUX=disabled

•      在内存中关闭SElinux
[root@localhost ~]# setenforce 0

•      检查内存中状态
[root@localhost ~]# getenforce
如果日志显示结果为disabled或者permissive,说明操作已经成功。

修改主机名称

修改主机名的原因是为了方便我们记忆与管理,但这并不是主要原因,更主要的是防止spark的内部实现机制要通过主机名来路由到该主机的IP上,而且我们需要保证每一台机器的主机名不相同。

本示例中仅以第一台服务器的操作为示例,其他的服务器都是相同的操作,但需要注意的是一定要保证每一台主机的hostname不相同。(建议使用spark1,spark2,spark3.. . 这样的格式依次为每一台服务器命名)。

以下给出修改主机名的操作命令(在ROOT下进行操作):

Centos6:
[root@localhost ~]# vi /etc/hostname
将内容修改为新的hostname

Centos7:
[root@localhost ~]# hostnamectl set-hostname spark1;
[root@localhost ~]# hostname spark1

执行完以上的命令退出,重新登录即可。

主机名中不能使用下划线(_)。

主机名不能保护大写字符

修改集群HOSTS

修改HOSTS的原因主要有两点:

1、 为了防止spark内部实现机制同坐主机名来进行对主机的访问。

2、 为了我们在配置过程中书写起来比较方便,看起来也一目了然。

这里要说明的是,我们配置HOSTS并不是只配置本机IP和主机的对应关系,而是我们规划中的每一台机器都要配置所有机器的IP和主机名称的对应关系。

修改HOSTS方法:

以下给出修改HOSTS的操作命令(在ROOT用户下进行操作):

修改/etc/hosts文件,在文件中添加规划中的所有主机的IP和主机名的对应关系。而且每一台机器都配置。

[root@spark1~]# vi /etc/hosts

在该文件中添加以下格式的内容,该内容是我们规划中的所有主机的IP和主机名称,而且每一台机器的HOSTS中都要添加相同的内容,IP与主机名用一个TAB键隔开。

192.168.186.101     spark1

192.168.186.102     spark2

192.168.186.103     spark3

如果想要对个名称路由到同一个IP,我们只需要在后边继续添加即可,同样是使用TAB键隔开。例如:

192.168.186.101     es1  master    spark1    hadoop1

配置免密登录

因为集群再启动中需要跨服务器启动,那么两台服务器之间就需要通过sshd服务进行通信。但是由于我们通过sshd服务进行通信时,每次都要输入密码,这样很麻烦,而且也不合理。如果集群中机器很多我们输入不过来,如果在启动中由于输入密码超时导致启动失败,如果我们集群中分配任务有需要输入密码又该怎么办。所以,配置免密登录是有必要的。

从理论上来讲,我们只需要配置各个work节点对master节点免密即可。因为我们启动时都是master去各个节点去启动任务,也都是master向各个work提交任务,但是为了避免不必要的麻烦,我们所有设备之间都进行免密登录操作。

注意:配置免密登录是与用户相关的,如果再root用户下配置就是对root用户免密。所以,我们此时配置要使用spark用户。但是,在配置免密之前要保证其他设备已经配置好以上的步骤,保证都已经存在spark用户。

安装SSH服务

[spark@spark1 ~]# yum -y install ssh

设置开机启动

centos6: [spark@spark1 ~]# chkconfig sshd on
centos7: [spark@spark1 ~]# systemctl enable sshd.service

启动服务

[spark@spark1 ~]# systemctl start sshd.service

生成密钥

[spark@spark1 ~]# ssh_keygen –t rsa
一路回车,什么都不输入

配置免密设备

在当前操作的设备上执行以下命令,有多少台机器需要对当前设备免密就执行多少次,只需要将命令中的USER和IP修改为被免密设备的真实IP和用户名称。凡是选择yes/no的都输入yes,需要输入密码的地方都输入被免密设备中被免密用户的密码。

[spark@spark1~]# ssh-copy-id USER@IP yes PASSWORD 配置设备免密

[root@spark1 ~]# ssh-copy-id spark@192.168.174.101
[root@spark1 ~]# ssh-copy-id spark@192.168.174.102
[root@spark1 ~]# ssh-copy-id spark@192.168.174.103

JDK安装 和 scala安装(二者安装其一就可以)

下载jdk安装包,解压缩,配置环境变量即可

export JAVA_HOME=/opt/jdk1.8.0_131
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

#自JDK1.7之后 CLASSPATH 可以不配置

下载scala安装包,解压缩,配置环境变量即可

export SCALA_HOME=/opt/scala-2.11.11
export PATH=$SCALA_HOME/bin:$PATH

Spark集群部署

上传到服务器并解压到相应的目录下

tar –zxvf spark-2.2.0-bin-hadoop2.7.tgz –C /opt

修改配置文件

spark-env.sh.template
cp /opt/spark-2.2.0-bin-hadoop2.7/conf/spark-env.sh.template  /opt/spark-2.2.0-bin-hadoop2.7/conf/spark-env.sh
vi /opt/spark-2.2.0-bin-hadoop2.7/conf/spark-env.sh
export JAVA_HOME=/opt/jdk1.8.0_131                      # Java安装目录,如果安装的是Java配置这个
# export SCALA_HOME=/opt/scala-2.11.11                    # Scala安装目录,如果安装的是scala配置这个,这两个参数二选一即可
# export HADOOP_HOME=/opt/hadoop-2.7.5                    # hadoop安装目录
export HADOOP_CONF_DIR=/opt/hadoop-2.7.5/etc/hadoop     # hadoop集群的配置文件的目录
export SPARK_LOCAL_DIR=/opt/spark/tmp                   # spark运算所产生的中间文件存放的目录
export SPARK_MASTER_IP=hdfs01                           # spark集群的Master几点的ip地址
export SPARK_WORKER_MEMORY=4g                           # 每个worker节点能够最大分配给exectors的内存大小
export SPARK_WORKER_CORES=2                             # 每个worker几点所占用的CPU核数目
export SPARK_WORKER_INSTANCES=1                         # 每台机器上开启的worker节点的数目

slaves.template

cp / opt/ spark-2.2.0-bin-hadoop2.7/conf/slaves.template /opt/spark-2.2.0-bin-hadoop2.7/conf/slaves
vi /opt/spark-2.2.0-bin-hadoop2.7/conf/slaves

首先删除:localhost
然后增加你slave机器的主机名称(Excuter):
spark1
spark2
spark3

将配置好的Spark分发到其他服务器

scp -r /opt/spark-2.2.0-bin-hadoop2.7 root@hdfs01:/opt

在每台设备上创建Spark运行的临时目录

sudo mkdir -p /opt/spark/tmp
sudo chown -R XX:XX /opt/spark  XX分别为属主数组

在每台设备上设置环境变量

sudo vi /etc/profile

添加环境变量

export SPARK_HOME=/opt/spark-2.2.0-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
/*按esc 输入 :wq 保存并退出*/

使环境变量立即生效

source /etc/profile

启动Spark集群

Spark的start-all.sh命令与Hadoop的start-all.sh命令冲突,如果有安装hadoop运行时要输入脚本所在的路径。
/opt/spark-2.2.0-bin-hadoop2.7/sbin/start-all.sh

停止集群

/opt/spark-2.2.0-bin-hadoop2.7/sbin/stop-all.sh
启动后jps查看进程是否存在,在master节点和slave节点上分别查看是否有对应进程

访问集群的监控页面

http://192.168.174.113:8080

运行Spark任务测试

cd  /opt/spark-2.2.0-bin-hadoop2.7
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hdfs01:7077 \
--num-executors 3 \
--driver-memory 512m \
--executor-memory 512m \
--executor-cores 1 \
./examples/jars/spark-examples*.jar 10

转载于:https://my.oschina.net/epoch/blog/1611082

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值