当前位置:   article > 正文

spark简介

spark

序言

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。

Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。-----spark  是基于scala的,scala又是基于java的cuiyaonan2000@163.com

尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。------spark可以直接操作hdfs

mapreduce是Hadoop原生自带,但是中小型企业更适合spark。从使用场景和运算速度上说spark更具有前景。

特点

  • 高级 API 剥离了对集群本身的关注,Spark 应用开发者可以专注于应用所要做的计算本身。
  • Spark 很快,支持交互式计算和复杂算法。
  • Spark 是一个通用引擎,可用它来完成各种各样的运算,包括 SQL 查询、文本处理、机器学习等,而在 Spark 出现之前,我们一般需要学习各种各样的引擎来分别处理这些需求

新能特点

就想spark官网上的内容所示:

  • 更快的速度:内存计算下,Spark 比 Hadoop 快100倍。

  • 易用性:Spark 提供了80多个高级运算符。

  • 通用性:Spark 提供了大量的库,包括Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX。 开发者可以在同一个应用程序中无缝组合使用这些库。

  • run everywhere:hbase也能用,这个可以看下是否能提升下hbase的效率cuiyaonan2000@163.com

SPARK生态

根据官网的截图spark主要包含如下的内容:

 Spark Core

其他Spark的库都是构建在RDD和Spark Core之上的

  • 包含Spark的基本功能,包含任务调度,内存管理,容错机制等
  • 内部定义了RDDs(弹性分布式数据集)
  • 提供了很多APIs来创建和操作这些RDDs
  • 应用场景,为其他组件提供底层的服务

Spark SQL

提供通过Apache Hive的SQL变体Hive查询语言(HiveQL)与Spark进行交互的API。每个数据库表被当做一个RDDSpark SQL查询被转换为Spark操作

  • 是Spark处理结构化数据的库,就像Hive SQL,Mysql一样
  • 应用场景,企业中用来做报表统计

Spark Streaming

对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据------类似的还有storm和flink。cuiyaonan2000@163.com

  • 是实时数据流处理组件,类似Storm
  • Spark Streaming提供了API来操作实时流数据
  • 应用场景,企业中用来从Kafka接收数据做实时统计

MLlib

一个常用机器学习算法库算法被实现为对RDD的Spark操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。

  • 一个包含通用机器学习功能的包,Machine learning lib
  • 包含分类,聚类,回归等,还包括模型评估和数据导入。
  • MLlib提供的上面这些方法,都支持集群上的横向扩展。
  • 应用场景,机器学习。

Graphx-----图计算

控制图、并行图操作和计算的一组算法和工具的集合。GraphX扩展了RDD API,包含控制图、创建子图、访问路径上所有顶点的操作

  • 是处理图的库(例如,社交网络图),并进行图的并行计算。
  • 像Spark Streaming,Spark SQL一样,它也继承了RDD API。
  • 它提供了各种图的操作,和常用的图算法,例如PangeRank算法。
  • 应用场景,图计算。

Cluster Managers

  • 就是集群管理,Spark自带一个集群管理是单独调度器。
  • 常见集群管理包括Hadoop YARN,Apache Mesos---------------------------跟hdfs整合的时候还是Yarn更好

Spark部署图

Cluster Manager(资源管理器)

指的是在集群上获取资源的外部服务。

Cluster Manager Type

  • Standalone – a simple cluster manager included with Spark that makes it easy to set up a cluster.
  • Apache Mesos – a general cluster manager that can also run Hadoop MapReduce and service applications.
  • Hadoop YARN – the resource manager in Hadoop 2.
  • Kubernetes – an open-source system for automating deployment, scaling, and management of containerized applications.

Worker Node

从节点,负责控制计算节点,启动Executor或者Driver。

Driver Program

Driver即运行上述Application的main函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境在Spark中有SparkContext负责与ClusterManager通信进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver----------------------spark 与java 整合的代码要做的事情cuiyaonan2000@163.com

Executor(进程jvm

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

Task

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

Job

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

Stage

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

Spark运行模式

Spark的运行模式多种多样,灵活多变,部署在单机上时,既可以用本地模式运行,也可以用伪分布模式运行,而当以分布式集群的方式部署时,也有众多的运行模式可供选择,这取决于集群的实际情况,底层的资源调度即可以依赖外部资源调度框架,也可以使用Spark内建的Standalone模式

本地模式

常用于本地开发测试,本地还分别 local 和 local cluster

Standalone(spark自身的资源管理服务)

Standalone是Spark自带的资源管理器,如果一个集群是Standalone的话,那么就需要在多台机器上同时部署spark环境,只要修改一台机器配置,就要同步到所有的机器上去,比较麻烦,生产环境中不采取。

框架图

  • Standalone模式使用Spark自带的资源调度框架
  • 采用Master/Slaves的典型架构选用ZooKeeper来实现Master的HA
  • 该模式主要的节点有Client节点、Master节点和Worker节点。
  • Driver既可以运行在Master节点上中,也可以运行在本地Client端。
  • 当用spark-shell交互式工具提交Spark的Job时,Driver在Master节点上运行;
  • 当使用spark-submit工具提交Job或者在Eclips、IDEA等开发平台上使用”new SparkConf.setManager(“spark://master:7077”)”方式运行Spark任务时,Driver是运行在本地Client端上的

运行流程图----此流程图同时适用于yarn模式,只是资源服务器换成了yarn

  1. SparkContext连接到Master,向Master注册并申请资源(CPU Core 和Memory)
  2. Master根据SparkContext的资源申请要求和Worker心跳周期内报告的信息决定在哪个Worker上分配资源,然后在该Worker上获取资源,然后启动StandaloneExecutorBackend;
  3. StandaloneExecutorBackend向SparkContext注册;
  4. SparkContext将Applicaiton代码发送给StandaloneExecutorBackend;并且SparkContext解析Applicaiton代码,构建DAG图,并提交给DAG Scheduler分解成Stage(当碰到Action操作时,就会催生Job;每个Job中含有1个或多个Stage,Stage一般在获取外部数据和shuffle之前产生),然后以Stage(或者称为TaskSet)提交给Task Scheduler,Task Scheduler负责将Task分配到相应的Worker,最后提交给StandaloneExecutorBackend执行;
  5. StandaloneExecutorBackend会建立Executor线程池,开始执行Task,并向SparkContext报告,直至Task完成
  6. 所有Task完成后,SparkContext向Master注销,释放资源

Spark on Yarn

Spark on Yarn 模式就是将Spark应用程序跑在Yarn集群之上,通过Yarn资源调度将executor启动在container中,从而完成driver端分发给executor的各个任务。将Spark作业跑在Yarn上,首先需要启动Yarn集群,然后通过spark-shell或spark-submit的方式将作业提交到Yarn上运行。
 

YARN-client

  1. Spark Yarn Client向YARN的ResourceManager申请启动Application Master。同时在SparkContent初始化中将创建DAGScheduler和TASKScheduler等,由于我们选择的是Yarn-Client模式,程序会选择YarnClientClusterScheduler和YarnClientSchedulerBackend
  2. ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,与YARN-Cluster区别的是在该ApplicationMaster不运行SparkContext,只与SparkContext进行联系进行资源的分派
  3. Client中的SparkContext初始化完毕后,与ApplicationMaster建立通讯,向ResourceManager注册,根据任务信息向ResourceManager申请资源(Container)
  4. 一旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通信,要求它在获得的Container中启动CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend启动后会向Client中的SparkContext注册并申请Task
  5. client中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运行Task并向Driver汇报运行的状态和进度,以让Client随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务
  6. 应用程序运行完成后,Client的SparkContext向ResourceManager申请注销并关闭自己

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,CoarseGrainedExecutorBackend启动后会向ApplicationMaster中的SparkContext注册并申请Task。这一点和Standalone模式一样,只不过SparkContext在Spark Application中初始化时,使用CoarseGrainedSchedulerBackend配合YarnClusterScheduler进行任务的调度,其中YarnClusterScheduler只是对TaskSchedulerImpl的一个简单包装,增加了对Executor的等待逻辑等
  5. ApplicationMaster中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运行Task并向ApplicationMaster汇报运行的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务
  6. 应用程序运行完成后,ApplicationMaster向ResourceManager申请注销并关闭自己

client与cluster区别(即Application Master的任务区别

理解YARN-Client和YARN-Cluster深层次的区别之前先清楚一个概念:Application Master。在YARN中,每个Application实例都有一个ApplicationMaster进程,它是Application启动的第一个容器。它负责和ResourceManager打交道并请求资源,获取资源之后告诉NodeManager为其启动Container。从深层次的含义讲YARN-Cluster和YARN-Client模式的区别其实就是ApplicationMaster进程的区别-------------------这个ApplicationMaster一个任务的调度程序,

  • YARN-Cluster模式下:Driver运行在AM(Application Master)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行--------------------因而YARN-Cluster模式不适合运行交互类型的作业
  • YARN-Client模式下:Application Master仅仅向YARN请求Executor,Client会和请求的Container通信来调度他们工作,也就是说Client不能离开。----------适合交互类型的任务cuiyaonan2000@163.com

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/499728
推荐阅读
相关标签
  

闽ICP备14008679号