Apache Spark 是一个新兴的大数据处理通用引擎,提供了分布式的内存抽象。Spark 最大的特点就是快,可比 Hadoop MapReduce 的处理速度快 100 倍。本文没有使用一台电脑上构建多个虚拟机的方法来模拟集群,而是使用三台电脑来搭建一个小型分布式集群环境安装。

本教程采用Spark2.0以上版本(比如Spark2.0.2、Spark2.1.0等)搭建集群,同样适用于搭建Spark1.6.2集群。

安装Hadoop并搭建好Hadoop集群环境

Spark分布式集群的安装环境,需要事先配置好Hadoop的分布式集群环境。如果没有配置好Hadoop的分布式集群环境,请点击Hadoop 2.7分布式集群环境搭建,根据教程进行安装。(备注:本教程采用Spark2.0搭建集群,同样适用于搭建Spark1.6.2集群)

安装Spark

这里采用3台机器(节点)作为实例来演示如何搭建Spark集群,其中1台机器(节点)作为Master节点,另外两台机器(节点)作为Slave节点(即作为Worker节点),主机名分别为Slave01和Slave02。

在Master节点机器上,访问Spark官方下载地址,按照如下图下载。

Spark on Mesos模式 还需要hdfs吗 spark一定要装hadoop_Hadoop

下载完成后,执行如下命令:

cd ./apps
sudo tar -zxvf ~/下载/spark-2.3.1-bin-without-hadoop.tgz 
sudo mv ./spark-2.0.2-bin-without-hadoop/ ./spark-2.3.1
sudo chown -R hadoop ./spark

配置环境变量

在Mster节点主机的终端中执行如下命令:

vim ~/.bashrc

在.bashrc添加如下配置:

export SPARK_HOME=/home/hadoop/apps/spark-2.3.1
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

执行如下命令使得配置立即生效:

source ~/.bashrc
Spark配置

在Master节点主机上进行如下操作:

  • 配置slaves文件
cd /usr/local/spark/cp ./conf/slaves.template ./conf/slaves

slaves文件设置Worker节点。编辑slaves内容,把默认内容localhost替换成如下内容:

slave01
slave02
  • 配置spark-env.sh文件
cp ./conf/spark-env.sh.template ./conf/spark-env.sh

添加如下内容:

export SPARK_DIST_CLASSPATH=$(/home/hadoop/apps/hadoop-2.7.3/bin/hadoop classpath)
export HADOOP_CONF_DIR=/home/hadoop/apps/hadoop-2.7.3
export SPARK_MASTER_IP=219.216.72.8

SPARK_MASTER_IP 指定 Spark 集群 Master 节点的 IP 地址;

配置好后,将Master主机上的/usr/local/spark文件夹复制到各个节点上。在Master主机上执行如下命令:

scp -r ~/apps/spark-2.3.1 slave01:/home/apps
scp -r ~/apps/spark-2.3.1 slave02:/home/apps
启动Spark集群

启动Hadoop集群

启动Spark集群前,要先启动Hadoop集群。在Master节点主机上运行如下命令:

start-all.sh

启动Spark集群

启动Master节点, 在Master节点主机上运行如下命令:

start-master.sh

在Master节点上运行jps命令,可以看到多了个Master进程:

15093 Jps
14343 SecondaryNameNode
14121 NameNode
14891 Master
14509 ResourceManager

启动所有Slave节点

在Master节点主机上运行如下命令:

start-slaves.sh

分别在slave01、slave02节点上运行jps命令,可以看到多了个Worker进程

37553 DataNode
37684 NodeManager
37876 Worker
37924 Jps

在浏览器上查看Spark独立集群管理器的集群信息

在master主机上打开浏览器,访问http://master:8080,如下图:

Spark on Mesos模式 还需要hdfs吗 spark一定要装hadoop_hadoop_02

关闭Spark集群
  • 关闭Master节点
stop-master.sh
  • 关闭Worker节点
stop-slaves.sh
  • 关闭Hadoop集群
stop-all.sh

Python使用spark时出現版本不同的错误

cd ./apps/spark-2.3.1/conf
vim spark-env.sh
加入下面两句
export PYSPARK_PYTHON=/home/hadoop/anaconda3/bin/python
export PYSPARK_DRIVER_PYTHON=/home/hadoop/anaconda3/bin/ipython
集群管理
  • 独立集群管理器
  • YARN集群管理器

独立集群管理器

(1)在集群中运行应用程序JAR包

spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077 examples/jars/spark-examples_2.11-2.3.1.jar 100 2>&1 | grep "Pi is roughly"

(2)在集群中运行spark-shell

spark-shell --master spark://master:7077

YARN集群管理器

(1)在集群中运行应用程序JAR包 向Hadoop YARN集群管理器提交应用,需要把yarn-cluster作为主节点参数递给spark-submit。 请登录Linux系统,打开一个终端,在Shell中输入如下命令:

spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster /home/hadoop/apps/spark-2.3.1/examples/jars/spark-examples_2.11-2.3.1.jar

(2)在集群中运行spark-shell 也可以用spark-shell连接到独立集群管理器上。 请登录Linux系统,打开一个终端,在Shell中输入如下命令启动进入spark-shell:

spark-shell --master yarn
pyspark --master yarn