首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Zzreal的大数据笔记-SparkDay01

Spark

一、Spark概述

1、什么是Spark

Spark是一种快速、通用、可扩展的大数据分析引擎。它集批处理、实时流处理、交互式查询和图计算于一体,避免了多种运算场景下需要部署不同集群带来的资源浪费。

2、Spark的优点

速度。与hadoop的MR相比,Spark的运算要快100倍以上;而基于硬盘的计算也要快10倍以上。

易用。Spark支持java、python、scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用.而且Spark支持交互式的python和scala的shell。

通用性。Spark提供了统一的解决方案,可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(MLlib)和图计算(GraphX).作为统一的解决方案,Spark不仅没有牺牲性能作为代价,相反,在性能方面具有很大的优势。

可融合性。Spark可以非常方便的与其他开源产品进行融合,比如Hadoop的YARN和Apache Mesos,并且可以处理所有Hadoop支持的数据,包括HDFS、Hbase和Cassandra。

3、Spark的架构综述

(1)Spark的整体架构如下图所示。

其中,Driver是用户编写的数据处理逻辑,这个逻辑中包含用户创建的SparkContext。SparkContext是用户逻辑与Spark集群主要的交互接口,它会和ClusterManager交互,包括向它申请计算资源等。ClusterManager负责集群的资源管理和调度,现在支持Standalone、Apache Mesos和Hadoop的YARN。WorkerNode是集群中可以执行计算任务的节点。Executor是在一个WorkerNode上为某应用启动的一个进程,该进程负责运行任务,并且负责将数据存在内存或者磁盘上。Task是被送到某个Executor上的计算单元。每个应用都有各自独立的Executor,计算最终在计算节点的Executor中执行。

(2)Spark运行流程图如下:

构建Spark Application的运行环境,启动SparkContext

SparkContext向资源管理器(可以是Standalone,Mesos,Yarn)申请运行Executor资源,并启动StandaloneExecutorbackend

Executor向SparkContext申请Task

SparkContext将应用程序分发给Executor

SparkContext构建成DAG图,将DAG图分解成Stage、将Taskset发送给Task Scheduler,最后由Task Scheduler将Task发送给Executor运行

Task在Executor上运行,运行完释放所有资源

(3)常见术语:

Application:Appliction都是指用户编写的Spark应用程序,包括一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码

Application jar:一个包含用户 Spark 应用的 Jar。有时候用户会想要去创建一个包含他们应用以及它的依赖的 “uber jar”。用户的 Jar 应该没有包括 Hadoop 或者 Spark 库,然而,它们将会在运行时被添加。

Cluster manager:一个外部的用于获取集群上资源的服务。(例如,Standlone Manager,Mesos,YARN)

Deploy mode:根据 driver 程序运行的地方区别。在 “Cluster” 模式中,框架在群集内部启动 driver。在 “Client” 模式中,submitter(提交者)在 Custer 外部启动 driver。

Driver program:Spark中的Driver即运行上述Application的main函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境,在Spark中有SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver

Executor:某个Application运行在worker节点上的一个进程, 该进程负责运行某些Task, 并且负责将数据存到内存或磁盘上,每个Application都有各自独立的一批Executor, 在Spark on Yarn模式下,其进程名称为CoarseGrainedExecutor Backend。一个CoarseGrainedExecutor Backend有且仅有一个Executor对象, 负责将Task包装成taskRunner,并从线程池中抽取一个空闲线程运行Task, 这个每一个oarseGrainedExecutor Backend能并行运行Task的数量取决与分配给它的cpu个数

Job:包含多个Task组成的并行计算,往往由Spark Action触发生成, 一个Application中往往会产生多个Job

Stage:每个Job会被拆分成多组Task, 作为一个TaskSet, 其名称为Stage,Stage的划分和调度是有DAGScheduler来负责的,Stage有非最终的Stage(Shuffle Map Stage)和最终的Stage(Result Stage)两种,Stage的边界就是发生shuffle的地方

Task:被送到某个Executor上的工作单元,但hadoopMR中的MapTask和ReduceTask概念一样,是运行Application的基本单位,多个Task组成一个Stage,而Task的调度和管理等是由TaskScheduler负责

Worker node:集群中任何可以运行Application代码的节点,在Standalone模式中指的是通过slave文件配置的Worker节点,在Spark on Yarn模式下就是NoteManager节点

DAGScheduler:根据Job构建基于Stage的DAG(Directed Acyclic Graph有向无环图),并提交Stage给TASkScheduler。 其划分Stage的依据是RDD之间的依赖的关系找出开销最小的调度方法

TASKSedulter:将TaskSET提交给worker运行,每个Executor运行什么Task就是在此处分配的. TaskScheduler维护所有TaskSet,当Executor向Driver发生心跳时,TaskScheduler会根据资源剩余情况分配相应的Task。另外TaskScheduler还维护着所有Task的运行标签,重试失败的Task。

将这些术语串起来的运行层次图如下:

以上内容均为作者个人笔记,如有错误欢迎指正...

关注CSDN博客 Zonzereal,更多大数据笔记等你...

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171222G02SZH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券