3.Spark设计与运行原理,基本操作
1.Spark已打造出结构一体化、功能多样化的大数据生态系统,请用图文阐述Spark生态系统的组成及各组件的功能。
通过上图可以看出,Spark生态系统主要包含Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX以及独立调度器。
Spark Core:Spark核心组件,它实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含了对弹性分布式数据集(Resilient Distributed Datasets,简称RDD)的API 定义,RDD是只读的分区记录的集合,只能基于在稳定物理存储中的数据集和其他已有的RDD上执行确定性操作来创建。
Spark SQL:用来操作结构化数据的核心组件,通过Spark SQL可以直接查询Hive、HBase等多种外部数据源中的数据。Spark SQL的重要特点是能够统一处理关系表和RDD。在处理结构化数据时,开发人员无需编写MapReduce程序,直接使用SQL命令就能完成更加复杂的数据查询操作。
Spark Streaming:Spark提供的流式计算框架,支持高吞吐量、可容错处理的实时流式数据处理,其核心原理是将流数据分解成一系列短小的批处理作业,每个短小的批处理作业都可以使用Spark Core进行快速处理。Spark Streaming支持多种数据源,例如Kafka、Flume以及TCP套接字等数据源。
MLlib:Spark提供的关于机器学习功能的算法程序库,包括分类、回归、聚类、协同过滤算法等,还提供了模型评估、数据导入等额外的功能,开发人员只需了解一定的机器学习算法知识就能进行机器学习方面的开发,降低了学习成本。
GraphX:Spark提供的分布式图处理框架,拥有对图计算和图挖掘算法的API接口以及丰富的功能和运算符,极大的方便了对分布式图处理的需求,能在海量数据上运行复杂的图算法。
独立调度器、Yarn、Mesos:Spark框架可以高效地在一个到数千个节点之间伸缩计算,集群管理器则主要负责各个节点的资源管理工作,为了实现这样的要求,同时获得最大灵活性,Spark支持在各种集群管理器(Cluster Manager)上运行,Hadoop Yarn、Apache Mesos以及Spark自带的独立调度器都被称为集群管理器。
2.请详细阐述Spark的几个主要概念及相互关系:
Master, Worker; RDD,DAG; Application, job,stage,task; driver,executor,Claster Manager
DAGScheduler, TaskScheduler.
1)Master:负责为运行在资源管理跨框架上的应用程序分配资源。
2)Worker:根据Cluster Manager的指令分配资源,执行应用程序,释放资源。
3)RDD:RDD是一个懒执行的不可变的可以支持Lambda表达式的并行数据集合。RDD的最大好处就是简单,API的人性化程度很高。RDD的劣势是性能限制,它是一个JVM驻内存对象,这也就决定了存在GC的限制和数据增加时Java序列化成本的升高。
4)DAG:DAG是一个有向无环图,在Spark中, 使用 DAG 来描述我们的计算逻辑。主要分为DAG Scheduler 和Task Scheduler。
5)Application:application是Spark API 编程的应用程序,它包括实现Driver功能的代码和在程序中各个executor上要执行的代码,一个application由多个job组成。其中应用程序的入口为用户所定义的main方法。
6)job:Job是Spark应用执行层次结构中的最高层元素。在Spark应用程序中,每个RDD的Action操作都对应一个Job。每个Job会被划分成一系列的Stage, Stage的数量依赖于发生过多少次shuffle操作。
7)stage:每个Job都被划分为一些较小的任务集(Task Set),这些任务集称为Stage。这些Stage相互依赖,从而形成一个Stage的DAG图(有向无环图)。
8)task:发送给Executor端执行的工作单元。每个RDD的分区对应一个Task,也就是说,触发任务执行的RDD有多少个分区就会创建多少个Task。Task的创建是在Driver端完成,而Task的执行在Executor端。Executor会创建一个线程池来执行Task,每个Task对应一个执行线程。
总的来说Driver需要完成以下几个方面的工作:
- 通过运行Spark应用的main函数来启动Spark应用;
- 向资源管理平台申请资源,并在Worker节点上启动Executor;
- 创建SparkSession(包括SparkContext和SparkEnv, SparkContext会和Cluster Manager进行交互,包括向它申请资源等),并对Spark应用进行规划,编排,最后提交到Executor端执行;
- 收集Spark应用的执行状态,并返回执行结果;