IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Spark 概述 -> 正文阅读

[大数据]Spark 概述

一、Spark是什么?

Spark是基于DAG(有向无环图)的内存计算引擎.

二、Spark的安装部署

Spark和MapReduce效率不同的原因:

Spark把运算的中间数据存放在内存,迭代计算效率更高;

MapReduce的中间结果需要落地,需要保存到磁盘,这样必然会有磁盘io操作,影响性能。

Standalone模式

单机(Master+Worker同时运行)

ly@hadoop00 spark-2.2.0-bin-hadoop2.7 % echo $SPARK_HOME
/Users/ly/apps/spark-2.2.0-bin-hadoop2.7
$SPARK_HOME/sbin/start-all.sh
ly@hadoop00 spark-2.2.0-bin-hadoop2.7 % jps
19984 Master
20015 Worker
ly@hadoop00 spark-2.2.0-bin-hadoop2.7 % netstat -an|grep 7077
tcp4 0 0 192.168.237.1.7077 192.168.237.1.61730 ESTABLISHED
tcp4 0 0 192.168.237.1.61730 192.168.237.1.7077 ESTABLISHED
tcp4 0 0 192.168.237.1.7077 *.* LISTEN
ly@hadoop00 spark-2.2.0-bin-hadoop2.7 % netstat -an|grep 8080
tcp46 0 0 *.8080 *.* LISTEN
tcp4 0 0 10.9.70.214.61305 109.244.128.37.8080 ESTABLISHED

Spark Standalone Master : spark://hadoop00:7077??

?webui http://hadoop00:8080

?多机(1个Master+N个Worker)

Master节点配置:

# spark-env.sh

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home
#使spark运行在yarn上,必配,否则连不上YARN,并访问不了HDFS
export HADOOP_HOME=${HADOOP_HOME:-/Users/ly/apps/hadoop}
export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-/Users/ly/apps/hadoop/etc/hadoop}

# slaves

hadoop00
hadoop01

Slave节点配置:

 # spark-env.sh
export JAVA_HOME=${JAVA_HOME:-/opt/jdk1.8.0_251}
export SPARK_MASTER_HOST=hadoop00

?在Master上运行sbin/start-all.sh

ly@hadoop00 spark-2.2.0-bin-hadoop2.7 % sbin/start-all.sh
starting org.apache.spark.deploy.master.Master, logging to /Users/ly/apps/spark-2.2.0-binhadoop2.7/logs/spark-ly-org.apache.spark.deploy.master.Master-1-hadoop00.out
hadoop00: starting org.apache.spark.deploy.worker.Worker, logging to /Users/ly/apps/spark-2.2.0-
bin-hadoop2.7/logs/spark-ly-org.apache.spark.deploy.worker.Worker-1-hadoop00.out
hadoop01: starting org.apache.spark.deploy.worker.Worker, logging to /Users/ly/apps/spark-2.2.0-
bin-hadoop2.7/logs/spark-ly-org.apache.spark.deploy.worker.Worker-1-hadoop01.out
ly@hadoop00 spark-2.2.0-bin-hadoop2.7 % jps
20320 Jps
20304 Worker
20263 Master
[ly@hadoop01 spark-2.2.0-bin-hadoop2.7]$ jps
14464 Jps
14403 Worker

?webui: hadoop00:8080

?Demo:运行一个SparkPi

spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop00:7077 \
/Users/ly/apps/spark-2.2.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.2.0.jar 100

?history server配置:

# 修改spark-default.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://qianfeng01:8020/directory
spark.eventLog.compress true
# 修改spark-env.sh文件,添加如下配置
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=4000 -Dspark.history.retainedApplications=10
-Dspark.history.fs.logDirectory=hdfs://qianfeng01:8020/directory"
# 启动start-history-server.sh (start-all.sh先启动)
ly@hadoop00 spark-2.2.0-bin-hadoop2.7 % jps
21234 HistoryServer
# 访问hadoop00:4000

集群架构

?Yarn 模式

集群搭建

1 在Hadoop配置下的yarn-site.xml?件中增加以下两项:

# 这两项判断是否启动?个线程检查每个任务正使?的物理内存量/虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true
# 如果不配置这两个选项,在spark-on-yarn的client模式下,可能会报错,导致程序被终?。
<property>
 <name>yarn.nodemanager.pmem-check-enabled</name>
 <value>false</value>
</property>
<property>
 <name>yarn.nodemanager.vmem-check-enabled</name>
 <value>false</value>
</property>

?2 修改Spark-env.sh 添加:

HADOOP_CONF_DIR=/Haodop路径/hadoop-2.7.3/etc/hadoop
YARN_CONF_DIR=/Haodop路径/hadoop-2.7.3/etc/hadoop

YARN-Client?

在Yarn-client中,Driver运?在Client上,通过ApplicationMaster向RM获取资源。本地Driver负责与所有的 executor container进?交互,并将最后的结果汇总。结束掉终端,相当于kill掉这个spark应?。

启动命令

./bin/spark-submit
--class org.apache.spark.examples.SparkPi
--master yarn
--deploy-mode client
--driver-cores 1
--driver-memory 600M
--executor-memory 800M
--executor-cores 2
--num-executors 1
/usr/local/spark-2.2.0/examples/jars/spark-examples_2.11-2.2.0.jar 100

因为Driver在客户端,所以可以通过webUI访问Driver的状态,默认是http://hadoop1:4040访问,?YARN通过 http:// hadoop1:8088访问。

YARN-client的工作流程

  1. Spark Yarn Client向YARN的ResourceManager申请启动Application Master。同时在SparkContent初始化中将创建DAGScheduler和TASKScheduler等,由于我们选择的是Yarn-Client模式,程序会选择YarnClientClusterScheduler和YarnClientSchedulerBackend
  2. ResourceManager收到请求后,在集群中选择?个NodeManager,为该应?程序分配第?个
  3. Container,要求它在这个Container中启动应?程序的ApplicationMaster,与YARN-Cluster区别的是在该ApplicationMaster不运?SparkContext,只与SparkContext进?联系进?资源的分派
  4. Client中的SparkContext初始化完毕后,与ApplicationMaster建立通讯,向ResourceManager注册,根据任务信息向ResourceManager申请资源(Container)
  5. ?旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通信,要求它在获得的Container中启动CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend启动后会向Client中的SparkContext注册并申请Task
  6. Client中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运?Task并向Driver汇报运?的状态和进度,以让Client随时掌握各个任务的运?状态,从?可以在任务失败时重新启动任务应?程序运?完成后,Client的SparkContext向ResourceManager申请注销并关闭自己
  • 客户端的Driver将应?提交给Yarn后,Yarn会先后启动ApplicationMaster和executor,另外ApplicationMaster 和executor都 是装载在container?运?,container默认的内存是1G,ApplicationMaster分配的内存是driver-memory,executor分配的内存是executor-memory。同时,因为Driver在客户端,所以程序的运?结果可以在客 户端显 示,Driver以进程名为SparkSubmit的形式存在。

注意:因为是与Client端通信,所以Client不能关闭。

YARN-Cluster

  1. Spark Yarn Client向YARN中提交应?程序,包括ApplicationMaster程序、启动ApplicationMaster的命令、需要在Executor中运?的程序等
  2. ResourceManager收到请求后,在集群中选择?个NodeManager,为该应?程序分配第?个Container,要求它在这个Container中启动应?程序的ApplicationMaster,其中ApplicationMaster进?SparkContext等的初始化
  3. ApplicationMaster向ResourceManager注册,这样?户可以直接通过ResourceManage查看应?程序的运?状态,然后它将采?轮询的?式通过RPC协议为各个任务申请资源,并监控它们的运?状态直到运?结束
  4. ?旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通信,要求它在获得的Container中启动CoarseGrainedExecutorBackend,?Executor对象的创建及维护是由CoarseGrainedExecutorBackend负责的,CoarseGrainedExecutorBackend启动后会向ApplicationMaster中的SparkContext注册并申请Task。这?点和Standalone模式?样,只不过SparkContext在Spark Application中初始化时,使?CoarseGrainedSchedulerBackend配合YarnClusterScheduler进?任务的调度,其中YarnClusterScheduler只是对TaskSchedulerImpl的?个简单包装,增加了对Executor的等待逻辑等
  5. ApplicationMaster中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运?Task并向ApplicationMaster汇报运?的状态和进度,以让ApplicationMaster随时掌握各个任务的运?状态,从?可以在任务失败时重新启动任务?
  • ?应用程序运行完成后,ApplicationMaster向ResourceManager申请注销并关闭自己

YARN-Cluster和YARN-Client的区别

  • 理解YARN-Client和YARN-Cluster深层次的区别之前先清楚?个概念:Application Master。在YARN中,每 个Application实例都有?个ApplicationMaster进程,它是Application启动的第?个容器。它负责和 ResourceManager打交道并请求资源,获取资源之后告诉NodeManager为其启动Container。从深层次的含义讲YARN-Cluster和YARN-Client模式的区别其实就是ApplicationMaster进程的区别
  • YARN-Cluster模式下,Driver运?在AM(Application Master)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行,因而YARN-Cluster模式不适合运行交互类型的作业
  • YARN-Client模式下,Application Master仅仅向YARN请求Executor,Client会和请求的Container通信来调度他们?作,也就是说Client不能离开

总结

  • Yarn Cluster的Driver是在集群的某?台NM上,但是Yarn-Client就是在RM的机器上
  • 而Driver会和Executors进行通信,所以Yarn cluster在提交App之后可以关闭Client,而Yarn Client 不可以
  • Yarn-Cluster适合生产环境,Yarn-Client适合交互和调试。

三、Spark作业提交原理?

Demo:Spark提供的利用蒙特·卡罗算法求π值的案例,100这个参数是计算因子

在spark的安装目录bin目录执行:

./spark-submit --class org.apache.spark.examples.SparkPi \
--master spark://qianfeng01:7077 \
/usr/local/spark-2.2.0/examples/jars/spark-examples_2.11-2.2.0.jar 100

注: 我们可以自行访问WebUI界面查看其过程,在命令行查看结果即可?。

启动任务的时候并没有指定分配资源,而是有多少资源就使用了多少资源。跑任务的时候是可以指定资源的, 可以指定使用核数和内存资源。

./spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://qianfeng01:7077 \
--executor-memory 512m \
--total-executor-cores 2 \
/usr/local/spark-2.2.0/examples/jars/spark-examples_2.11-2.2.0.jar 100

--executor-memory 设置内存 
--total-executor-cores 核数

原理如图所示:

名词解释

1.Standalone模式下存在的角色

  • Client:客户端进程,负责提交作业到Master。
  • Master:Standalone模式中主控节点,负责接收Client提交的作业,管理Worker,并命令Worker启动Driver和Executor。
  • Worker:Standalone模式中slave节点上的守护进程,负责管理本节点的资源,定期向Master汇报心跳,接收Master的命令,启动Driver和Executor。
  • Driver: ?个Spark作业运行时包括?个Driver进程,也是作业的主进程,负责作业的解析、?成Stage并调度Task到Executor上。包括DAGScheduler,TaskScheduler。
  • Executor:即真正执行作业的地方,?个集群?般包含多个Executor,每个Executor接收Driver的命令LaunchTask,?个Executor可以执??到多个Task。

2.作业相关的名词解释

  • Stage:一个Spark作业一般包含一至多个Stage。
  • Task:一个Stage包含一至多个Task,通过多个Task实现并行运行的功能。
  • DAGScheduler: 实现将Spark作业分解成?到多个Stage,每个Stage根据RDD的Partition个数决定Task的个数,然后生成相应的Task set放到TaskScheduler中。
  • TaskScheduler:实现Task分配到Executor上执行。

四、Spark Shell

spark-shell是Spark自带的交互式Shell程序,?便?户进?交互式编程,?户可以在该命令?下?Scala编写Spark程序。

spark-shell程序?般?作Spark程序测试练习来?。spark-shell属于Spark的特殊应?程序,我们可以在这个特殊的应?程序中提交应?程序。

spark-shell启动有两种模式,分别为local模式和cluster模式。

Local模型

启动命令:spark-shell

local模式仅在本机启动?个SparkSubmit进程,没有与集群建立联系,虽然进程中有SparkSubmit但是不会被提交到集群。

Cluster模式(集群模式)

spark-shell \
--master spark://hadoop01:7077 \
--executor-memory 512m \
--total-executor-cores 1

# 后两个命令不是必须的 --master这条命令是必须的(除?在jar包中已经指可以不指定,不然就必须指定)

注: 启动spark-shell若是集群模式,在webUI会有?个?直执行的任务。

退出shell

注意:不要使用ctrl+c退出spark-shell

正确方法:使用?:quit 退出

若使用了ctrl+c退出,使用命令查看监听端口 netstat -anp | grep 4040 ,再使用kill -9 pid杀死即可。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:28:56  更:2021-08-11 12:29:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 19:50:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码