Spark 2.4.5 安装与使用.md

Spark 分布式

Spark 安装

下载地址:https://archive.apache.org/dist/spark/spark-2.4.5/

安装机器:master

版本:spark-2.4.5-bin-without-hadoop-scala-2.12.tgz

  1. 下载并解压
1
2
3
4
5
6
7
wget https://archive.apache.org/dist/spark/spark-2.4.5/spark-2.4.5-bin-without-hadoop-scala-2.12.tgz -P /opt/software

cd /opt/software

tar -zvxf spark-2.4.5-bin-without-hadoop-scala-2.12.gz

mv /opt/software/spark-2.4.5-bin-without-hadoop-scala-2.12 /opt/servers/spark-2.4.5
  1. 配置环境变量

vim /etc/profile

1
2
3
# Spark
export SPARK_HOME=/opt/servers/spark-2.4.5
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
  1. 删除多余的.cmd 脚本
1
2
cd $SPARK_HOME/bin
rm *.cmd
  1. 使其生效
1
source /etc/profile

Spark 配置

  1. 复制配置文件模版
1
2
3
4
5
6
cd $SPARK_HOME/conf

cp spark-env.sh.template spark-env.sh
cp spark-defaults.conf.template spark-defaults.conf
cp slaves.template slaves
cp log4j.properties.template log4j.properties
  1. 修改从节点主机名
1
2
3
4
5
vim slaves

master
slave1
slave2
  1. vim spark-env.sh 在末尾添加
1
2
3
4
5
6
7
8
9
export JAVA_HOME=/usr/java/jdk1.8.0_202
export SPARK_MASTER_HOST=master
export SPARK_MASTER_PORT=7077
# 默认端口8080 与 zookeeper 8080 端口冲突
export SPARK_MASTER_WEBUI_PORT=8989

export HADOOP_HOME=/opt/servers/hadoop-2.10.1
export HADOOP_CONF_DIR=/opt/servers/hadoop-2.10.1/etc/hadoop
export SPARK_DIST_CLASSPATH=$(/opt/servers/hadoop-2.10.1/bin/hadoop classpath)

备注:这里使用的是 spark-2.4.5-bin-without-hadoop, 所以要将 Hadoop 相关 jars 的位置告诉 Spark

  1. vim spark-defaults.conf
1
2
3
4
5
spark.master                     spark://master:7077
spark.eventLog.enabled true
spark.eventLog.dir hdfs://master:9000/spark-eventlog
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.driver.memory 512m

创建 HDFS 目录:hadoop fs -mkdir /spark-eventlog
备注:

  • spark.master。定义 master 节点,缺省端口号 7077
  • spark.eventLog.enabled。开启 eventLog
  • spark.eventLog.dir。eventLog 的存放位置
  • spark.serializer。一个高效的序列化器
  • spark.driver.memory。定义 driver 内存的大小(缺省 1G)
  1. 将 spark 分发到其他节点中
1
2
cd /opt/servers
rsync-script spark-2.4.5
  1. 其他节点配置 Spark 环境变量
1
2
3
4
5
vim /etc/profile 

# Spark
export SPARK_HOME=/opt/servers/spark-2.4.5
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

启动集群

要在主节点上启动集群

关掉 Yarn 对应的服务

启动 Dfs 服务

1
2
3
start-dfs.sh
cd $SPARK_HOME/sbin
./start-all.sh

image-20220803104448541

访问 web 界面 http://master:8989

image-20220803110327306

集群测试

1
run-example SparkPi 10

image-20220803111205168

HA 高可用

  1. 启动 zookeeper
  2. 修改 spark-env.sh
1
2
3
4
5
# 注释以下两行
#export SPARK_MASTER_HOST=master
#export SPARK_MASTER_PORT=7077

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master,slave1,slave2 -Dspark.deploy.zookeeper.dir=/spark"

备注:

  • spark.deploy.recoveryMode: 可选值 Zookeeper、FileSystem、None
  • ploy.zookeeper.url:Zookeeper 的 URL, 主机名:端口号(缺省 2181)
  • loy.zookeeper.dir: 保存集群元数据信息的地址,在 ZooKeeper 中保存该信息
  1. 分发到其他节点
1
rsync-script spark-env.sh
  1. 启动 spark 集群
1
$SPARK_HOME/sbin/start-all.sh
  1. 在 slave1 启动一个 master
1
$SPARK_HOME/sbin/start-master.sh

image-20220803153901713

此时如果 kill 掉 master 节点的 Master 服务,那么 slave1 的 Master 服务就会开始提供服务