【大数据】Spark部署与启动(文档)

发布时间 2023-10-19 12:34:36作者: PythonNew_Mr.Wang

Python 环境准备

Anaconda3:   https://pan.baidu.com/s/1e4Wx48RsW0Pm_saotxTW4A?pwd=66ki 

[root@test1 ~]# cd /export/       
[root@test1 export]# rz        							      # 上传源文件包
[root@test1 export]# sh ./Anaconda3-2021.05-Linux-x86_64.sh     # 安装Anaconda3
[/root/anaconda3] >>> /export/server/anaconda3                  # 输入YES后输入安装目录
[test@test1 ~]$ exit                                            # 重新连接服务器,进入base环境
[test@test1 ~]$ su -
(base) [root@test1 ~]# vim ~/.condarc                           # 创建国内镜像

channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

(base) [root@test1 ~]# conda create -n pyspark python==3.8.8   # 创建python虚拟环境
(base) [root@test1 ~]# conda activate pyspark                  # 激活环境
(pyspark) [root@test1 ~]#



Spark 环境准备

Spark压缩包: https://pan.baidu.com/s/14jg43nvuj-zQ9Uy9x59x9Q?pwd=u749 

(pyspark) [root@test1 export]# RZ        				  	  		     # 上传源文件包
(pyspark) [root@test1 export]# tar -zxvf spark-3.2.0-bin-hadoop3.2.tgz -C /export/server/  # 解压
(pyspark) [root@test1 export]# cd /export/server/               
(pyspark) [root@test1 server]# ln -s spark-3.2.0-bin-hadoop3.2/ spark     # 创建软连接
(pyspark) [root@test1 server]# vim /etc/profile                           # 配置环境

export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export SPARK_HOME=/export/server/spark
export PYSPARK_PYTHON=/export/server/anaconda3/envs/pyspark/bin/python3.8
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

(pyspark) [root@test1 server]# source /etc/profile                        # 激活环境
(pyspark) [root@test1 server]# vim /root/.bashrc
export JAVA_HOME=/export/server/jdk
export PYSPARK_PYTHON=/export/server/anaconda3/envs/pyspark/bin/python3.8

# 注释:
-  SPARK_HOME: 表示Spark安装路径在哪里 
-  PYSPARK_PYTHON: 表示Spark想运行Python程序, 那么去哪里找python执行器 
-  JAVA_HOME: 告知Spark Java在哪里 
-  HADOOP_CONF_DIR: 告知Spark Hadoop的配置文件在哪里 
-  HADOOP_HOME: 告知Spark  Hadoop安装在哪里 



1:Local 模式配置

原理:Local模式就是以一个 独立进程 配合其 内部线程 来提供完成Spark运行环境

# 测试
(pyspark) [root@test1 spark]# cd /export/server/anaconda3/envs/pyspark/bin/
(pyspark) [root@test1 bin]# ./pyspark

# 开启后查看地址(端口冲突会递增): http://192.168.88.201:4040/jobs/



2:StandAlone 模式配置

Spark应用程序部署在一个独立的Spark集群上,Spark应用程序可以作为一个独立的作业提交给Spark集群,并由集群中的资源管理器(Spark Master)进行管理和分配资源。
​Master角色以Master进程存在, Worker角色以Worker进程存在,Driver角色在运行时存在Master进程内,Executor运行于Worker进程内

Python 环境同步


# 退出虚拟环境:conda deactivate
# 激活虚拟环境:conda activate 虚拟环境名称
test2 test3 同步Python环境 ( Python 环境准备 )



Spark 配置文件


(pyspark) [root@test1 ~]# chown -R hadoop:hadoop /export/server/spark*  # 授权给hadoop用户
(pyspark) [root@test1 conf]# su - hadoop



# (1): 配置workers文件
[hadoop@test1 ~]# cd /export/server/spark/conf/ 
[hadoop@test1 conf]# mv workers.template workers
[hadoop@test1 conf]# vim workers                 # 清空后填入工作机
test1
test2
test3




# (2): 配置spark-env.sh文件   test1自定义
[hadoop@test1 conf]$ mv spark-env.sh.template spark-env.sh
[hadoop@test1 conf]$ vim spark-env.sh 

## 设置JAVA安装目录
JAVA_HOME=/export/server/jdk
## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
YARN_CONF_DIR=/export/server/hadoop/etc/hadoop
## 指定spark老大Master的IP和提交任务的通信端口
# 告知Spark的master运行在哪个机器上
export SPARK_MASTER_HOST=test
# 告知sparkmaster的通讯端口
export SPARK_MASTER_PORT=7077
# 告知spark master的 webui端口
SPARK_MASTER_WEBUI_PORT=8080
# worker cpu可用核数
SPARK_WORKER_CORES=1
# worker可用内存
SPARK_WORKER_MEMORY=1g
# worker的工作通讯地址
SPARK_WORKER_PORT=7078
# worker的 webui地址
SPARK_WORKER_WEBUI_PORT=8081
## 设置历史服务器
# 配置的意思是  将spark程序运行的历史日志 存到hdfs的/sparklog文件夹中
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://test1:8020/sparklog/ -Dspark.history.fs.cleaner.enabled=true"

[hadoop@test1 conf]$ start-dfs.sh              			# 先启动hadoop集群
[hadoop@test1 conf]$ hadoop fs -mkdir /sparklog          # 创建程序运行历史记录存放的文件夹
[hadoop@test1 conf]$ hadoop fs -chmod 777 /sparklog      # 授权最高权限





# (3):配置spark-defaults.conf文件     test1自定义
[hadoop@test1 conf]$ mv spark-defaults.conf.template spark-defaults.conf
[hadoop@test1 conf]$ vim spark-defaults.conf               # 追加以下内容
# 开启spark的日期记录功能
spark.eventLog.enabled 	true
# 设置spark日志记录的路径
spark.eventLog.dir	 hdfs://test1:8020/sparklog/ 
# 设置spark日志是否启动压缩
spark.eventLog.compress true




# (4):配置log4j.properties 文件 
[hadoop@test1 conf]$ mv log4j.properties.template log4j.properties
[hadoop@test1 conf]$ vim log4j.properties 
log4j.rootCategory=INFO, console  ->  log4j.rootCategory=WARN, console



Spark 文件夹同步


# 一定是hadoop所有权

# test1
[hadoop@test1 conf]$ cd /export/server/
[hadoop@test1 server]$ scp -r spark-3.2.0-bin-hadoop3.2 test2:/export/server/
[hadoop@test1 server]$ scp -r spark-3.2.0-bin-hadoop3.2 test3:/export/server/

# test2
[root@test2 server]# su - hadoop
[hadoop@test2 ~]# cd /export/server/
[hadoop@test2 server]# ln -s spark-3.2.0-bin-hadoop3.2 spark    # 创建软连接

# test3
[root@test3 server]# su - hadoop
[hadoop@test3 ~]# cd /export/server/
[hadoop@test3 server]# ln -s spark-3.2.0-bin-hadoop3.2 spark    # 创建软连接



StandAlone 启动


# 启动时需要启动: HDFS  /  YARN(history) 

[hadoop@test1 conf]$ cd /export/server/spark
[hadoop@test1 spark]$ sbin/start-history-server.sh    # 启动运行历史服务器    HistoryServer
[hadoop@test1 spark]$ sbin/start-all.sh               # 启动全部master和worker

# Master集群控制台:  http://192.168.88.201:8080/

# 或者可以一个个启动:
sbin/start-master.sh  # 启动当前机器的master
sbin/stop-master.sh   # 停止当前机器的master

sbin/start-worker.sh  # 启动当前机器的worker
sbin/stop-worker.sh   # 停止当前机器的worker



StandAlone连接集群


[hadoop@test1 spark]$ cd /export/server/spark/bin/
[hadoop@test1 bin]$ ./pyspark --master spark://test1:7077

# 程序运行临时地址:http://192.168.88.201:4040
# 历史任务服务地址:http://192.168.88.201:18080



Zookeeper 部署与启动

主节点选举·数据复制·客户端连接管理·故障检测和恢复


zookeeper文件包: https://pan.baidu.com/s/1xk_-PxCdP2CFGiklGa0fbA?pwd=8psi 

# test1
[hadoop@test1 bin]$ cd /export/               
[hadoop@test1 bin]$ rz
[hadoop@test1 export]$ tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz -C /export/server/  
[hadoop@test1 export]$ ln -s apache-zookeeper-3.5.9-bin zookeeper  # 创建软连接
[hadoop@test1 export]$ cd /export/server/zookeeper/conf/
[hadoop@test1 conf]$ cp zoo_sample.cfg zoo.cfg                 # 更名(权限问题)
[hadoop@test1 conf]$ cd /export/server/zookeeper/bin/
[hadoop@test1 bin]$ ./zkServer.sh start                        # 启动
25252 QuorumPeerMain
[hadoop@test1 bin]$ cd /export/server/
[hadoop@test1 server]$ scp -r apache-zookeeper-3.5.9-bin /export/server/  # 分发备用主机

# test2
[hadoop@test2 bin]$ cd /export/server/
[hadoop@test2 export]$ ln -s apache-zookeeper-3.5.9-bin zookeeper  # 创建软连接
[hadoop@test2 conf]$ cd /export/server/zookeeper/bin/
[hadoop@test2 bin]$ ./zkServer.sh start                            # 启动

# 可以选择放入变量环境



StandAlone HA 部署与启动

提高集群的可用性,支持故障恢复,负载均衡,系统扩展性

# 前提: 确保Zookeeper 和 HDFS 均已经启动

[hadoop@test1 bin]$ cd /export/server/spark/conf/
[hadoop@test1 conf]$ vim spark-env.sh           # 修改spark-env.sh
# 删除:
export SPARK_MASTER_HOST=test1
# 配置zookeeper 主备机
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=test1:2181,test2:2181,test3:2181 -Dspark.deploy.zookeeper.dir=/spark-ha"
[hadoop@test1 conf]$ scp spark-env.sh test2:/export/server/spark/conf/    # 分发
[hadoop@test1 conf]$ scp spark-env.sh test3:/export/server/spark/conf/    # 分发
[hadoop@test1 conf]$ cd /export/server/spark
[hadoop@test1 spark]$ sbin/stop-all.sh                    # 停止当前StandAlone集群

# test1
[hadoop@test1 spark]$ sbin/start-all.sh

# test2
[hadoop@test2 ~]$ cd /export/server/spark
[hadoop@test2 spark]$ sbin/start-master.sh

# 启动两个Master 三个Worker

# test1 http://192.168.88.201:8081/   
URL: spark://test1:7077
Alive Workers: 3
Cores in use: 3 Total, 0 Used
Memory in use: 3.0 GiB Total, 0.0 B Used
Resources in use:
Applications: 0 Running, 0 Completed
Drivers: 0 Running, 0 Completed
Status: ALIVE
Workers (3)


# test2 http://192.168.88.202:8080/
URL: spark://test2:7077
Alive Workers: 0
Cores in use: 0 Total, 0 Used
Memory in use: 0.0 B Total, 0.0 B Used
Resources in use:
Applications: 0 Running, 0 Completed
Drivers: 0 Running, 0 Completed
Status: STANDBY

# 在正式部署的时候需要测试是否主备交换



Spark On YARN 模式

Master由ResoureManager代替,Worker由NodeManager代替

Executor全部运行在YARN提供的容器内

Spark On YARN是有两种运行模式的

一种是Cluster模式一种是Client模式.这两种模式的区别就是Driver运行的位置.

Cluster模式(集群模式):Driver运行在YARN容器内部,和ApplicationMaster在同一个容器内

Client模式即(客户端模式):Driver运行在客户端进程中,比如Driver运行在spark-submit程序的进程中


+--------------+-----------------+----------------+---------------------+-------------------+
|   模式       |  Driver运行位置  |   日志查看      |       生产可用       |      稳定性       |
+--------------+-----------------+----------------+---------------------+-------------------+
| Cluster模式  |    YARN容器内    |     容器内      |        推荐         |        稳定       |
| Client模式   |   客户端进程内   | 输出流中方便查看 |       不推荐        |   受客户端进程影响  |
+--------------+-----------------+----------------+---------------------+-------------------+


bin/pyspark --master yarn --deploy-mode client|cluster
# --deploy-mode 选项是指定部署模式, 默认是 客户端模式
# client就是客户端模式
# cluster就是集群模式
# --deploy-mode 仅可以用在YARN模式下

常用参数:

--class:指定Spark应用程序的入口类。
--master:指定Spark应用程序的运行模式,如yarn、local等。
--deploy-mode:指定应用程序的部署模式,如client、cluster等。
--executor-memory:指定每个Executor的内存大小。
--num-executors:指定Executor的数量。
--driver-memory:指定Driver的内存大小。
--executor-cores:指定每个Executor的核心数。
--driver-cores:指定Driver的核心数。
--queue:指定提交应用程序到的队列。
--name:指定应用程序的名称。
--conf:指定配置参数,如spark.executor.memory、spark.driver.memory等。
--files:指定要上传到Executor所在节点的文件。
--jars:指定要上传到Executor所在节点的JAR包。
--archives:指定要上传到Executor所在节点的压缩包。
--py-files:指定要上传到Executor所在节点的Python文件。
--packages:指定要下载的依赖包。
--repositories:指定要搜索依赖包的仓库。
--exclude-packages:指定不下载的依赖包。
--driver-class-path:指定Driver的类路径。
--executor-class-path:指定Executor的类路径。
--driver-java-options:指定Driver的JVM参数。
--executor-java-options:指定Executor的JVM参数。
--verbose:显示详细的日志信息。
--help:显示帮助信息。



Spark On YARN 启动(推荐)


# 确保   HADOOP_CONF_DIR    YARN_CONF_DIR   的环境变量
[hadoop@test1 ~]$ cd /export/server/spark/conf
HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
YARN_CONF_DIR=/export/server/hadoop/etc/hadoop

# 启动交互式(一)
[hadoop@test1 hadoop]$ cd /export/server/spark
[hadoop@test1 spark]$ bin/pyspark --master yarn

# 提交执行任务(二)  提示太多可以到日志配置文件修改等级:ERROR
# bin/spark-submit --master yarn --deploy-mode client|cluster /xxx/xxx/xxx.py 参数
[hadoop@test1 spark]$ bin/spark-submit --master yarn --deploy-mode client /export/server/spark/examples/src/main/python/pi.py 100


# 查看执行  
http://192.168.88.201:8088/cluster