ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

3.Spark设计与运行原理,基本操作

2022-03-09 15:04:42  阅读:164  来源: 互联网

标签:worker driver RDD executor 基本操作 Spark 原理 spark


1.Spark已打造出结构一体化、功能多样化的大数据生态系统,请用图文阐述Spark生态系统的组成及各组件的功能。

1. Spark Core
Spark Core是整个BDAS的核心组件,是一种大数据分布式处理框架,不仅实现了MapReduce的算子map函数和reduce函数及计算模型,还提供如filter、join、groupByKey等更丰富的算子。
Spark将分布式数据抽象为弹性分布式数据集,实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。其底层采用Scala函数式语言书写而成,并且深度借鉴Scala函数式的编程思想,提供与Scala类似的编程接口。

2. Mesos
Mesos是Apache下的开源分布式资源管理框架,被称为分布式系统的内核,提供了类似YARN的功能,实现了高效的资源任务调度。

3. Spark Streaming
Spark Streaming是一种构建在Spark上的实时计算框架,它扩展了Spark处理大规模流式数据的能力。其吞吐量能够超越现有主流流处理框架Storm,并提供丰富的API用于流数据计算。

4. MLlib
MLlib是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器。MLlib目前支持4种常见的机器学习问题:二元分类、回归、聚类以及协同过滤,还包括一个底层的梯度下降优化基础算法。

5. GraphX
GraphX是Spark中用于图和图并行计算的API,可以认为是GraphLab和Pregel在Spark 上的重写及优化,与其他分布式图计算框架相比,GraphX最大的贡献是,在Spark上提供一栈式数据解决方案,可以方便、高效地完成图计算的一整套流水作业。

6. Spark SQL
Shark是构建在Spark和Hive基础之上的数据仓库。它提供了能够查询Hive中所存储数据的一套SQL接口,兼容现有的Hive QL语法。熟悉Hive QL或者SQL的用户可以基于Shark进行快速的Ad-Hoc、Reporting等类型的SQL查询。由于其底层计算采用了Spark,性能比Mapreduce的Hive普遍快2倍以上,当数据全部存储在内存时,要快10倍以上。2014年7月1日,Spark社区推出了Spark SQL,重新实现了SQL解析等原来Hive完成的工作,Spark SQL在功能上全覆盖了原有的Shark,且具备更优秀的性能。

7. Alluxio
Alluxio是一个分布式内存文件系统,可以理解为内存中的HDFS。为了提供更高的性能,将数据存储剥离Java Heap。用户可以基于Alluxio实现RDD或者文件的跨应用共享,并提供高容错机制,保证数据的
可靠性。

8. BlinkDB
BlinkDB是一个用于在海量数据上进行交互式SQL的近似查询引擎。它允许用户在查询准确性和查询响应时间之间做出权衡,执行相似查询。

二、请详细阐述Spark的几个主要概念及相互关系:

  Master, Worker;  RDD,DAG; Application, job,stage,task; driver,executor,Claster Manager,DAGScheduler, TaskScheduler.

1、master和worker节点
master节点常驻master守护进程,负责管理worker节点,并且会从master节点提交应用。worker节点常驻worker守护进程,会与master节点进行通信,并且管理executor进程。在搭建spark集群时,就已经设置好了master节点和worker节点,一个集群中可以有多个master节点和多个worker节点。一台pc机器可以同时作为master和worker节点

2、driver和executor进程
driver:
根据不同的部署模式,driver可以运行在master上,也可以运行在worker上。driver进程就是应用的main函数并且会构建sparkContext对象,当提交应用后,就会启动一个对应的driver进程,driver本身会根据设置的参数占用一定的资源,主要是 cpu core和memory。driver首先会向集群管理者申请spark应用所需的资源,也就是executor,然后集群管理者会根据spark应用所设置的参数在各个worker上分配一定数量的executor,每个executor都会占用一定数量的cpu和memory。在申请到应用所需的资源后,driver就能开始调度和执行编写的应用代码了。driver进程会将我们编写的spark应用代码拆分成多个stage,每个stage会执行一部分代码片段,并为每个stage创建一批tasks,然后再将这些tasks分配到各个executor中执行。

executor:
executor进程宿主在worker节点上,一个worker可以有多个executor。每个executor会持有一个线程池,每个线程可以执行一个task。executor执行完task后,可以将结果返回给driver,每个executor执行的task都是属于同一个应用的。此外executor还有一个功能就是为应用程序中要求缓存的RDD提供内存式存储,RDD是直接缓存在executor进程内的,也是因此,任务task可以在运行时充分利用缓存数据加速运算。

3、application

application(应用)其实就是用spark-submit提交的程序。比方说spark examples中的计算pi的SparkPi。一个application通常包含三部分:从数据源(比方说HDFS)取数据形成RDD,通过RDD的transformation和action进行计算,将结果输出到console或者外部存储(比方说collect收集输出到console)。

4、driver

5、job

Spark中的Job和MR中Job不一样不一样。MR中Job主要是Map或者Reduce Job。而Spark的Job其实很好区别,一个action算子就算一个Job,比方说count,first等。

6、Task

Task是Spark中最新的执行单元。RDD一般是带有partitions的,每个partition的在一个executor上的执行可以任务是一个Task。 

 7、Stage

Stage概念是spark中独有的。一般而言一个Job会切换成一定数量的stage。各个stage之间按照顺序执行。至于stage是怎么切分的,首选得知道spark论文中提到的narrow dependency(窄依赖)和wide dependency( 宽依赖)的概念。其实很好区分,看一下父RDD中的数据是否进入不同的子RDD,如果只进入到一个子RDD则是窄依赖,否则就是宽依赖。宽依赖和窄依赖的边界就是stage的划分点。从spark的论文中的两张截图,可以清楚的理解宽窄依赖以及stage的划分。

8、DAGScheduler, TaskScheduler:

spark调度器分为两个部分, 一个是 DagScheduler, 一个是 TaskScheduler,DagScheduler 主要是用来把一个 Job 根据宽依赖划分为多个Stage(阶段),对于划分出来的每个 stage 都抽象为一个 TaskSet任务集 交给TaskScheduler 来进行进一步的调度运行

3.在PySparkShell尝试以下代码,观察执行结果,理解sc,RDD,DAG。请画出相应的RDD转换关系图。

标签:worker,driver,RDD,executor,基本操作,Spark,原理,spark
来源: https://www.cnblogs.com/1966599379abc/p/15985100.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有