【spark入门】

spark概述

什么是sqark

回顾:Hadoop主要解决,海量数据的存储和海量数据的分析计算。
Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎,解决海量数据的分析计算

历史

Hadoop的Yarn框架诞生于2013年,而spark诞生于2009年,所以spark自己设计了一套资源调度框架

spark运行模式

Spark目前支持的部署模式有以下几种:
(1)Local模式:在本地部署单个Spark服务 (本地测试用)
(2)Standalone模式:Spark自带的任务调度模式。(国内常用)
(3)YARN模式:Spark使用Hadoop的YARN组件进行资源与任务调度。(国内最常用)
(4)Mesos模式:Spark使用Mesos平台进行资源与任务的调度。(国内很少用)

Spark安装地址

1)官网地址:http://spark.apache.org/
2)文档查看地址:https://spark.apache.org/docs/3.1.3/
3)下载地址:https://spark.apache.org/downloads.html
https://archive.apache.org/dist/spark/

Local模式

Local模式就是运行在一台计算机上的模式,通常就是用于在本机上练手和测试。

安装使用

1)上传并解压Spark安装包

[atguigu@hadoop102 sorfware]$ tar -zxvf spark-3.1.3-bin-hadoop3.2.tgz -C /opt/module/
[atguigu@hadoop102 module]$ mv spark-3.1.3-bin-hadoop3.2 spark-local

2)官方求PI案例

[atguigu@hadoop102 spark-local]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
./examples/jars/spark-examples_2.12-3.1.3.jar \
10

 --class:表示要执行程序的主类;
 --master local[2]
(1)local: 没有指定线程数,则所有计算都运行在一个线程当中,没有任何并行计算
(2)local[K]:指定使用K个Core来运行计算,比如local[2]就是运行2个Core来执行

20/09/20 09:30:53 INFO TaskSetManager:
20/09/15 10:15:00 INFO Executor: Running task 1.0 in stage 0.0 (TID 1)
20/09/15 10:15:00 INFO Executor: Running task 0.0 in stage 0.0 (TID 0)

(3)local[*]:默认模式。自动帮你按照CPU最多核来设置线程数。比如CPU有8核,Spark帮你自动设置8个线程计算。
 spark-examples_2.12-3.1.3.jar:要运行的程序;
 10:要运行程序的输入参数(计算圆周率π的次数,计算次数越多,准确率越高);

在任务运行还没有完成时,可登录hadoop102:4040查看程序运行结果

Standalone模式

Standalone模式是Spark自带的资源调度引擎,不需要借助Hadoop的Yarn和Mesos等其他框架。

集群角色

Master和Worker集群资源管理

在这里插入图片描述

Driver和Executor任务的管理者

在这里插入图片描述

安装使用

1)集群规划

hadoop102hadoop103hadoop104
sparkMaster|workerworkerworker

2)再解压一份Spark安装包,并修改解压后的文件夹名称为spark-standalone

[atguigu@hadoop102 sorfware]$ tar -zxvf spark-3.1.3-bin-hadoop3.2.tgz -C /opt/module/
[atguigu@hadoop102 module]$ mv spark-3.1.3-bin-hadoop3.2 spark-standalone

3)进入Spark的配置目录/opt/module/spark-standalone/conf

[atguigu@hadoop102 spark-standalone]$ cd conf

4)修改workers文件,添加work节点:

[atguigu@hadoop102 conf]$ mv workers.template workers
[atguigu@hadoop102 conf]$ vim workers
hadoop102
hadoop103
hadoop104

5)修改spark-env.sh文件,添加master节点

[atguigu@hadoop102 conf]$ mv spark-env.sh.template spark-env.sh
[atguigu@hadoop102 conf]$ vim spark-env.sh

SPARK_MASTER_HOST=hadoop102
SPARK_MASTER_PORT=7077

6)分发spark-standalone包

[atguigu@hadoop102 module]$ xsync spark-standalone/

7)启动spark集群

[atguigu@hadoop102 spark-standalone]$ sbin/start-all.sh

注意:如果遇到 “JAVA_HOME not set” 异常,可以在sbin目录下的spark-config.sh 文件中加入如下配置。

export JAVA_HOME=XXXX

8)网页查看:master的webUI:hadoop102:8080 (相当于Yarn的8088端口)
4040:application的webUI的端口号。

参数说明

1)配置Executor可用内存为2G,使用CPU核数为2个

[atguigu@hadoop102 spark-standalone]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077 \
--executor-memory 2G \
--total-executor-cores 2 \
./examples/jars/spark-examples_2.12-3.1.3.jar \
10

2)页面查看http://hadoop102:8080/
在这里插入图片描述

3)基本语法
bin/spark-submit
–class
–master
… # other options

[application-arguments]

4)参数说明
- -class ——— Spark程序中包含主函数的类
- -master ——— Spark程序运行的模式 local[*]、spark://hadoop102:7077、Yarn
- executor-memory 1G ——— 指定每个executor可用内存为1G,默认1G
- -total-executor-cores 2 ——— 指定所有executor使用的cpu核数为2个
- -executor-cores ——— 指定每个executor使用的cpu核数为2个
- - driver-cores ——— driver使用的内核数,默认为1
- - driver-memory ——— driver内存大小,默认为512M
application-jar
application-arguments 传给main()方法的参数

配置历史服务

由于spark任务停止掉后,hadoop102:4040页面就看不到历史任务的运行情况,所以开发时都配置历史服务器记录任务运行情况。
1)修改spark-default.conf.template名称

[atguigu@hadoop102 conf]$ mv spark-defaults.conf.template spark-defaults.conf

2)修改spark-default.conf文件,配置日志存储路径(写)

[atguigu@hadoop102 conf]$ vim spark-defaults.conf
spark.eventLog.enabled          true
spark.eventLog.dir              hdfs://hadoop102:8020/directory
注意:需要启动Hadoop集群,HDFS上的目录需要提前存在。
[atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
[atguigu@hadoop102 hadoop-3.1.3]$ hadoop fs -mkdir /directory

3)修改spark-env.sh文件,添加如下配置:

[atguigu@hadoop102 conf]$ vim spark-env.sh

export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080 
-Dspark.history.fs.logDirectory=hdfs://hadoop102:8020/directory 
-Dspark.history.retainedApplications=30"

# 参数1含义:WEBUI访问的端口号为18080
# 参数2含义:指定历史服务器日志存储路径(读)
# 参数3含义:指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。
4)分发配置文件

[atguigu@hadoop102 conf]$ xsync spark-defaults.conf spark-env.sh

5)启动历史服务

[atguigu@hadoop102 spark-standalone]$ 
sbin/start-history-server.sh

6)再次执行任务

[atguigu@hadoop102 spark-standalone]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
./examples/jars/spark-examples_2.12-3.1.3.jar \
10

7)查看Spark历史服务地址:hadoop102:18080

在这里插入图片描述

配置高可用(HA)

1)高可用原理

在这里插入图片描述
2)配置高可用

(0)停止集群

[atguigu@hadoop102 spark-standalone]$ sbin/stop-all.sh

(1)Zookeeper正常安装并启动(基于以前讲的数仓项目脚本)

[atguigu@hadoop102 ~]$ zk.sh start

(2)修改spark-env.sh文件添加如下配置:

[atguigu@hadoop102 conf]$ vim spark-env.sh
#注释掉如下内容:
#SPARK_MASTER_HOST=hadoop102
#SPARK_MASTER_PORT=7077

#添加上如下内容。配置由Zookeeper管理Master,在Zookeeper节点中自动创建/spark目录,用于管理:
export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER 
-Dspark.deploy.zookeeper.url=hadoop102,hadoop103,hadoop104 
-Dspark.deploy.zookeeper.dir=/spark"

#添加如下代码
#Zookeeper3.5的AdminServer默认端口是8080,和Spark的WebUI冲突
export SPARK_MASTER_WEBUI_PORT=8989

(3)分发配置文件

[atguigu@hadoop102 conf]$ xsync spark-env.sh

(4)在hadoop102上启动全部节点

[atguigu@hadoop102 spark-standalone]$ sbin/start-all.sh

(5)在hadoop103上单独启动master节点

[atguigu@hadoop103 spark-standalone]$ sbin/start-master.sh

在这里插入图片描述

运行流程

Spark有standalone-clientstandalone-cluster两种模式,主要区别在于:Driver程序的运行节点。
1)客户端模式

[atguigu@hadoop102 spark-standalone]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077,hadoop103:7077 \
--executor-memory 2G \
--total-executor-cores 2 \
--deploy-mode client \
./examples/jars/spark-examples_2.12-3.1.3.jar \
10

- -deploy-mode client,表示Driver程序运行在本地客户端,默认模式。
在这里插入图片描述
2)集群模式

[atguigu@hadoop102 spark-standalone]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077,hadoop103:7077 \
--executor-memory 2G \
--total-executor-cores 2 \
--deploy-mode cluster \
./examples/jars/spark-examples_2.12-3.1.3.jar \
10

- -deploy-mode cluster,表示Driver程序运行在集群。
在这里插入图片描述

Yarn模式

Spark客户端直接连接Yarn,不需要额外构建Spark集群。

安装使用

0)停止Standalone模式下的spark集群

[atguigu@hadoop102 spark-standalone]$ sbin/stop-all.sh
[atguigu@hadoop102 spark-standalone]$ zk.sh stop
[atguigu@hadoop103 spark-standalone]$ sbin/stop-master.sh

1)为了防止和Standalone模式冲突,再单独解压一份spark

[atguigu@hadoop102 software]$ tar -zxvf spark-3.1.3-bin-hadoop3.2.tgz -C /opt/module/

2)进入到/opt/module目录,修改spark-3.1.3-bin-hadoop3.2名称为spark-yarn

[atguigu@hadoop102 module]$ mv spark-3.1.3-bin-hadoop3.2/ spark-yarn

3)修改hadoop配置文件/opt/module/hadoop/etc/hadoop/yarn-site.xml,添加如下内容
因为测试环境虚拟机内存较少,防止执行过程进行被意外杀死,做如下配置

[atguigu@hadoop102 hadoop]$ vim yarn-site.xml
<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
     <name>yarn.nodemanager.pmem-check-enabled</name>
     <value>false</value>
</property>

<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
     <name>yarn.nodemanager.vmem-check-enabled</name>
     <value>false</value>
</property>

4)分发配置文件

[atguigu@hadoop102 conf]$ xsync /opt/module/hadoop/etc/hadoop/yarn-site.xml

5)修改/opt/module/spark-yarn/conf/spark-env.sh,添加YARN_CONF_DIR配置,保证后续运行任务的路径都变成集群路径

[atguigu@hadoop102 conf]$ mv spark-env.sh.template spark-env.sh
[atguigu@hadoop102 conf]$ vim spark-env.sh

YARN_CONF_DIR=/opt/module/hadoop/etc/hadoop

6)启动HDFS以及YARN集群

[atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh

7)执行一个程序

[atguigu@hadoop102 spark-yarn]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
./examples/jars/spark-examples_2.12-3.1.3.jar \
10

参数:–master yarn,表示Yarn方式运行;–deploy-mode表示客户端方式运行程序
8)查看hadoop103:8088页面,点击History,查看历史页面

在这里插入图片描述

配置历史服务

1)修改spark-default.conf.template名称

[atguigu@hadoop102 conf]$ mv spark-defaults.conf.template spark-defaults.conf

2)修改spark-default.conf文件,配置日志存储路径(写)

[atguigu@hadoop102 conf]$ vim spark-defaults.conf
spark.eventLog.enabled          true
spark.eventLog.dir               hdfs://hadoop102:8020/directory

3)修改spark-env.sh文件,添加如下配置:

[atguigu@hadoop102 conf]$ vim spark-env.sh

export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080 
-Dspark.history.fs.logDirectory=hdfs://hadoop102:8020/directory 
-Dspark.history.retainedApplications=30"

# 参数1含义:WEBUI访问的端口号为18080
# 参数2含义:指定历史服务器日志存储路径(读)
# 参数3含义:指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。

配置查看历史日志

为了能从Yarn上关联到Spark历史服务器,需要配置spark历史服务器关联路径。
目的:点击yarn(8088)上spark任务的history按钮,进入的是spark历史服务器(18080),而不再是yarn历史服务器(19888)。

1)修改配置文件/opt/module/spark-yarn/conf/spark-defaults.conf
添加如下内容:

spark.yarn.historyServer.address=hadoop102:18080
spark.history.ui.port=18080

2)重启Spark历史服务

[atguigu@hadoop102 spark-yarn]$ sbin/stop-history-server.sh 

[atguigu@hadoop102 spark-yarn]$ sbin/start-history-server.sh

3)提交任务到Yarn执行

[atguigu@hadoop102 spark-yarn]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
./examples/jars/spark-examples_2.12-3.1.3.jar \
10

4)Web页面查看日志:http://hadoop103:8088/cluster
点击“history”跳转到http://hadoop102:18080/
在这里插入图片描述

运行流程

Spark有yarn-clientyarn-cluster两种模式,主要区别在于:Driver程序的运行节点。
yarn-client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出。
yarn-cluster:Driver程序运行在由ResourceManager启动的APPMaster,适用于生产环境。

1)客户端模式(默认)

[atguigu@hadoop102 spark-yarn]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
./examples/jars/spark-examples_2.12-3.1.3.jar \
10

在这里插入图片描述
2)集群模式

[atguigu@hadoop102 spark-yarn]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
./examples/jars/spark-examples_2.12-3.1.3.jar \
10

(1)查看http://hadoop103:8088/cluster页面,点击History按钮,跳转到历史详情页面
在这里插入图片描述
(2)http://hadoop102:18080点击Executors->点击driver中的stdout
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:如果在yarn日志端无法查看到具体的日志,则在yarn-site.xml中添加如下配置并启动Yarn历史服务器
在这里插入图片描述

<property>
    <name>yarn.log.server.url</name>
    <value>http://hadoop102:19888/jobhistory/logs</value>
</property>

在这里插入图片描述

端口号总结

1)Spark查看当前Spark-shell运行任务情况端口号:4040
2)Spark Master内部通信服务端口号:7077 (类比于Yarn的8020/9000端口(RM和NM的内部通信))
3)Spark Standalone模式Master Web端口号:8080(类比于Hadoop Yarn任务运行情况查看端口号:8088
4)Spark历史服务器端口号:18080 (类比于Hadoop历史服务器端口号:19888
spark只负责计算,所以没有hadoop中存储数据的端口9870

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值