Spark完全分布式搭建过程

来源:互联网 发布:2017年春运数据 编辑:程序博客网 时间:2024/06/10 13:48

1 环境准备

1.1 建立虚拟集群

本博客内容基于虚拟的分布式集群进行Spark平台的搭建部署,运用Windows平台下的虚拟机软件VMware创建拥有3个节点的集群,其中集群拥有1个Master节点、2个Slave节点。
1.新建虚拟机
运用VMware软件新建一台名称为Master的虚拟机,硬件配置为2GB的内存、双核CPU以及20GB的硬盘容量,网络连接方式选用桥接模式,并在虚拟网络编辑器中配置网络桥接到物理网卡,最后为其安装Ubuntu 14.04 LTS 64位操作系统,安装过程中设定用户名为czb。
2.克隆虚拟机
关闭新建的虚拟机,采用克隆的方式完整克隆虚拟机的软硬件配置,其中克隆的第一台虚拟机取名Slave1,第二台虚拟机取名Slave2。为保证虚拟机配置不超出物理内存,修改各Slave节点内存为1GB。
3.为每台虚拟机配置IPv4
为保证宿主机与虚拟机之间能够相互通信,集群各节点的IP设置与宿主机位于同一局域网内,如下所示(其中宿主机IP地址为10.100.129.117):

Master   10.100.129.88Slave1   10.100.129.89Slave2   10.100.129.90

其余配置一致:

子网掩码    255.255.255.0网关        10.100.129.1DNS服务器   202.196.64.1

4.修改hostname文件
配置各节点的主机名hostname。打开hostname文件:

$sudo gedit /etc/hostname

各节点hostname设置如下:

Master   masterSlave1   slave1Slave2   slave2

5.修改hosts文件
配置各节点的hosts文件,方便集群间通信。打开hosts文件:

$sudo gedit /etc/hosts

各节点hosts配置一致,在文件开头的第二行加入以下语句:

10.100.129.88  master10.100.129.89  slave110.100.129.90  slave2

6.检测各节点间互联
采用ping命令检测各节点间是否能够相互ping通:
如在master下执行ping 10.100.129.89 -c 3。

1.2 安装与配置JDK

为每台虚拟机安装与配置JDK,其中JDK存放路径及版本保持一致。
1.创建JDK存放路径

$sudo mkdir /usr/lib/jvm

2.到官网下载jdk-7u80-linux-x64.tar.gz,并解压缩到/usr/lib/jvm

$sudo tar -zxvf jdk-7u80-linux-x64.tar.gz -C /usr/lib/jvm/

3.打开/etc/profile,配置JDK环境变量

$sudo gedit /etc/profile

在文件末尾追加如下语句:

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0.80export CLASSPATH=.:${JAVA_HOME}/lib:${JAVA_HOME}/jre/libexport PATH=${JAVA_HOME}/bin:$PATH

保存并退出,执行source /etc/profile使得配置立即生效。
4.执行java -version查看当前JDK版本,检测配置是否生效

1.3 配置SSH免密钥登录

该配置是为了避免节点间访问时需要密码登录的困扰。
1.在各节点安装SSH服务器

$sudo apt-get install openssh-server

2.在各节点创建.ssh文件夹

$sudo mkdir .ssh

3.在各节点生成密钥对

$ssh-keygen -t rsa

一路按下Enter键,生成的密钥对保存在~/.ssh/目录下,其中id_rsa为私钥,id_rsa.pub为公钥。
4.各节点实现自身免密钥登录

$cat .ssh/id_rsa.pub >> .ssh/authorized_keys

执行ssh localhost检测是否配置成功。
5.实现各节点相互免密钥登录
以master免密钥登录slave1为例。
将master公钥拷贝至slave1:

$scp .ssh/id_rsa.pub czb@slave1:~/

在slave1节点将master公钥追加至authorized_keys文件中:

$cat id_rsa.pub >> .ssh/authorized_keys

检测是否配置成功,在master节点执行:

$ssh slave1

1.4 安装时间同步工具ntpdate

虚拟机节点在集群运行过程中的时间不一致,会造成分布式计算工作无法并行执行,ntpdate工具可以保证各slave节点与master节点时间保持同步。
集群在开启时,各slave节点执行:

$sudo ntpdate master

2 Spark集群配置

2.1 安装与配置Scala

为每台虚拟机安装与配置Scala,其中Scala存放路径及版本保持一致。
1.到官网下载scala-2.10.6.tgz,并解压缩到/usr/lib/scala

$sudo tar -zxvf scala-2.10.6.tgz -C /usr/lib/scala

2.打开/etc/profile,配置Scala环境变量

$sudo gedit /etc/profile

在文件末尾加入以下语句:

export SCALA_HOME=/usr/lib/scala/scala-2.10.6export PATH=${SCALA_HOME}/bin:$PATH

保存后退出,执行source /etc/profile配置生效。
3.执行scala -version查看当前Scala版本,检测配置是否生效

2.2 配置Spark

该配置需要在各节点上进行,本集群以spark-1.4.0为例配置Spark集群。首先对master节点执行如下操作:
1.下载安装spark-1.4.0,解压缩至用户目录下

$sudo tar -zxvf ~/下载/spark-1.4.0-bin-hadoop2.6.tgz -C ~

修改解压缩后的spark-1.4.0-bin-hadoop2.6的文件夹权限:

$sudo chown -R spark-1.4.0-bin-hadoop2.6 czb:czb

2.配置Spark环境变量
修改/etc/profile,追加如下内容:

export SPARK_HOME=/home/czb/spark-1.4.0-bin-hadoop2.6export PATH=${SPARK_HOME}/bin:${SPARK_HOME}/sbin:$PATH

保存后退出,执行source /etc/profile配置生效。
3.修改Spark配置文件
进入spark-1.4.0-bin-hadoop2.6/conf目录下:
(1)重命名spark-env.sh.template为spark-env.sh,并在文件末尾追加如下语句:

export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_80export SCALA_HOME=/usr/lib/scala/scala-2.10.6export HADOOP_HOME=/home/czb/hadoop-2.6.0export SPARK_MASTER_IP=10.100.129.88export HADOOP_CONF_DIR=/home/czb/hadoop-2.6.0/etc/hadoopexport SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://master:9000/sparkLogs"

(2)重命名spark-defaults.conf.template为spark-defaults.conf,并在文件末尾追加如下语句:

spark.eventLog.enabled  truespark.eventLog.dir      hdfs://master:9000/sparkLogsspark.eventLog.compress truespark.yarn.historyServer.address        master:18080

(3)编辑slaves:

slave1slave2

最后,将master节点配置好的整个spark文件夹拷贝至各slave节点:

$scp -r spark-1.4.0-bin-hadoop2.6 czb@slave1:~$scp -r spark-1.4.0-bin-hadoop2.6 czb@slave2:~

4.启动Spark集群
启动master节点。

$start-master.sh

启动slave节点。

$start-slaves.sh

启动历史作业服务进程。

$start-history-server.sh

集群配置完成后,可在终端运行命令查看集群状态。
运行jps命令查看集群状态。

$jps

master节点显示:

19671 HistoryServer20602 Jps20170 Master

slave节点显示:

3604 Worker3654 Jps

通过Web端口查看集群状态,其中查看集群状态访问master:8080,查看作业运行状态访问master:4040,查看历史作业访问master:18080。