51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

spark安装与部署

为了防止不必要的报错,部署之前请务必从开头开始看,切勿跳过其中一个部署模式,因为每一个部署模式都是从上一个模式的配置上进行的

环境说明 {#环境说明}

  • hadoop-2.7.5
  • jdk1.8.0_181
  • Scala
  • spark-3.3.0-bin-hadoop2

下载地址: {#下载地址:}

官网地址 本帖版本

(Local)本地部署模式 {#Local-本地部署模式}

所谓的Local模式,就是不需要其他任何节点资源就可以在本地执行Spark代码的环境

spark-3.3.0-bin-hadoop2.tgz包上传至Linux并解压指定目录

|-----------|------------------------------------------------------------------| | 1 | tar -zxvf spark-3.3.0-bin-hadoop2.tgz -C /export/servers |

为了方便后续操作,建议修改文件名(可忽略)

|-----------|----------------------------| | 1 | cd /export/servers |

|-----------|------------------------------------------------| | 1 | mv spark-3.3.0-bin-hadoop2 spark-3.3.0 |

添加环境变量/etc/profile

|-----------|-------------------------------| | 1 | sudo vim /etc/profile |

在文件内添加以下变量

|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 | export SPARK_HOME=/export/servers/spark-3.3.0 export PATH=$SPARK_HOME/bin:$HBASE_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$PATH |

使用环境变量生效:

|-----------|-----------------------------| | 1 | source /etc/profile |

进入spark-3.3.0执行命令 bin/spark-shel

image-20220815182931997

看到这个界面表示本地启动成功

启动成功后,可以输入网址https://master:404进行Web UI监控页面访问

image-20220815183325689

(Standalone)独立部署模式 {#Standalone-独立部署模式}

local本地模式毕竟只是用来进行练习演示的,真实工作中还是要将应用提交到对应的集群中去执行,这里我们来看看只使用Spark自身节点运行的集群模式,也就是我们所谓的独立部署(Standalone)模式。Spark的Standalone模式体现了经典的master-slave模式。

修改配置文件

进入sparkconf目录

|-----------|---------------------------------------------| | 1 | cd /export/servers/spark-3.3.0/conf |

修改以下配置

workers

spark-defaults.conf

spark-env.sh

这三个文件在目录里都是模板,这里我们需要各复制一份出来并删除模板后缀名.template

|-------------------|-------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 | cp workers.template workers cp spark-defaults.conf.template spark-defaults.conf cp spark-env.sh.template spark-env.sh |

修改workers文件,删除localhost,添加以下内容

|---------------|------------------------------| | 1 2 3 | master slave1 slave2 |

注意:这里的节点,是你的分布式集群三台虚拟机的主机名

修改spark-env.sh,添加JAVA_HOME环境变量和对应的master节点

|---------------|---------------------------------------------------------------------------------------------------------------------| | 1 2 3 | export JAVA_HOME=/export/servers/jdk1.8.0_181 export SPARK_MASTER_HOST=master export SPARK_MASTER_PORT=7077 |

注意:7077端口,相当于slave2内部通信的8020端口,此处的端口需要确认自己的Hadoop配置

默认就是7077,这里我们不做改动

分发spark文件给其他节点

|---------------|-----------------------------------------------------------------------------------------------------------------------------| | 1 2 3 | scp -r /export/servers/spark-3.3.0 slave1:/export/servers scp -r /export/servers/spark-3.3.0 slave2:/export/servers |

porfile环境配置文件发给其他节点并刷新配置

|---------------|---------------------------------------------------------------------------------------------------| | 1 2 3 | sudo scp -r /etc/profile slave1:/etc/profile sudo scp -r /etc/profile slave2:/etc/profile |

|-----------|-----------------------------| | 1 | source /etc/profile |

启动集群 {#启动集群}

执行脚本 sbin/start-all.sh,注意是在spark目录下

|-----------|---------------------------| | 1 | sbin/start-all.sh |

image-20220815185046232

查看三台服务器的进程

image-20220815190145607

查看master节点上的资源监控页面web端https://master:8080

image-20220815190302094

提交应用

|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 | bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master spark://master:7077 \ ./examples/jars/spark-examples_2.12-3.3.0.jar \ 10 |

--class表示要执行程序的主类

--master spark://master:7077独立部署模式,连接到Spark集群

spark-examples_2.12-3.0.0.jar运行类所在的jar包

数字10表示程序的入口参数,用于设定当前应用的任务数量

image-20220815191509485

提交参数说明

在提交应用中,一般会同时一些提交参数

|-------------------|--------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 | bin/spark-submit \ --class <main-class> --master <master-url> \... # other options<application-jar> \[application-arguments] |

| 参数 | 解释 | 可选值举例 | |:-------------------------|--------------------------------------------------------------------------------------|-------------------------------------------| | --class | Spark程序中包含主函数的类 | | | --master | Spark程序运行的模式(环境) | 模式:local[*]、spark://hadoop02:7077、Yarn | | --executor-memory 1G | 指定每个executor可用内存为1G | 符合集群内存配置即可,具体情况具体分析。 | | --total-executor-cores 2 | 指定所有executor使用的cpu核数为2个 | | | --executor-cores | 指定每个executor使用的cpu核数 | | | application-jar | 打包好的应用jar,包含依赖。这个URL在集群中全局可见。 比如hdfs:// 共享存储系统,如果是file:// path,那么所有的节点的path都包含同样的jar | | | application-arguments | 传给main()方法的参数 | |

配置历史服务器 {#配置历史服务器}

叨叨一句:以下端口号为9000的与hadoopcore-site.xml的配置文件中的一致的,有些人的可能是8020,也有些人的是9000

由于spark-shell停止掉后,集群监控master:4040页面就看不到历史任务的运行情况,所以开发时都配置历史服务器记录任务运行情况。

修改spark-defaults.conf.templatespark-defaults.conf

|-----------|-------------------------------------------------------------| | 1 | cp spark-defaults.conf.template spark-defaults.conf |

修改spar-defaults.conf文件添加日志存储路径配置

|-------------|-----------------------------------------------------------------------------------------------------------| | 1 2 | spark.eventLog.enabled true spark.eventLog.dir hdfs://master:9000/directory |

image-20220815211308436

需要启动 hadoop 集群,HDFS 上的 directory 目录需要提前存在。

|---------------|--------------------------------------------------| | 1 2 3 | start-all.sh hadoop fs -mkdir /directory |

修改spark-env.sh文件, 添加日志配置

|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 | export SPARK_HISTORY_OPTS=" -Dspark.history.ui.port=18080 -Dspark.history.fs.logDirectory=hdfs://master:9000/directory -Dspark.history.retainedApplications=30" |

image-20220815205328249
参数1含义:WEB UI访问的端口号为18080

参数2含义:指定历史服务器日志存储路径

参数3含义:指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。

分发配置文件

|---------------|-----------------------------------------------------------------------------------------------------------------------------| | 1 2 3 | scp -r /export/servers/spark-3.3.0 slave1:/export/servers scp -r /export/servers/spark-3.3.0 slave2:/export/servers |

重新启动集群和历史服务

|---------------|--------------------------------------------------------| | 1 2 3 | sbin/start-all.sh sbin/start-history-server.sh |

重新执行任务

|-----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 | bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master spark://master:7077 \ ./examples/jars/spark-examples_2.12-3.3.0.jar \10 |

image-20220815202636140

查看历史服务器https://master:18080

image-20220815204834327

配置高可用(HA) {#配置高可用-HA}

在集群中配置多个Master结点。这里的高可用采用Zookeeper设置。

集群规划:

| master | slave1 | salve2 | |-----------|-----------|-----------| | Master | Master | | | Zookeeper | Zookeeper | Zookeeper | | Worker | Worker | Worker |

停止集群

|-----------|--------------------------| | 1 | sbin/stop-all.sh |

逐个节点启动 Zookeeper

|-----------|---------------------------| | 1 | zkServer.sh start |

修改 spark-env.sh文件添加如下配置

|------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 11 12 | #注释如下内容: #SPARK_MASTER_HOST=master #SPARK_MASTER_PORT=7077 #添加如下内容: # Master 监控页面默认访问端口为 8080,但是可能会和 Zookeeper 冲突, # 所以改成 8989,也可以自定义,访问 UI 监控页面时请注意 SPARK_MASTER_WEBUI_PORT=8989 export SPARK_DAEMON_JAVA_OPTS=" -Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master,slave1,slave2 -Dspark.deploy.zookeeper.dir=/spark" |

image-20220815205437396

分发配置文件

|---------------|-----------------------------------------------------------------------------------------------------------------------------| | 1 2 3 | scp -r /export/servers/spark-3.3.0 slave1:/export/servers scp -r /export/servers/spark-3.3.0 slave2:/export/servers |

启动集群

|-----------|---------------------------| | 1 | sbin/start-all.sh |

查看当前结点状态:https://master:8989

image-20220815205806674

启动 slave1 的单独 Master节点,此时 slave1 节点 Master 状态处于备用状态

|-----------|------------------------------| | 1 | sbin/start-master.sh |

image-20220815210020557

image-20220815210113159

提交应用到高可用集群

|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 | bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master spark://master:7077,slave1:7077 \ ./examples/jars/spark-examples_2.12-3.3.0.jar \ 10 |

如果报错,解决方法如下:

杀死master的master进程后再执行以上命令

image-20220815210710795

查看 slave1的 Master 资源监控 Web UI,稍等一段时间后,slave1 节点的 Master 状态提升为活动状态

image-20220815211139689

赞(0)
未经允许不得转载:工具盒子 » spark安装与部署