面试 | Spark知识点@20190102

Spark基本架构

image

从集群部署的角度来看,Spark集群由集群管理器(Cluster Manager)工作节点(Worker)执行器(Executor)驱动器(Driver)应用程序(Application)等部分组成。

  • Cluster Manager
    Spark的集群管理器,主要负责对整个集群资源的分配与管理。Cluster Manager分配的资源属于一级分配,它将各个Worker上的内存、CPU等资源分配给Application,但是并不负责对Executor的资源分配。

  • Worker
    Spark的工作节点。Worker节点主要负责以下工作,将自己的内存,CPU等资源通过注册机制告知Cluster Manager;创建Executor;将资源和任务进一步分配给Executor;同步资源信息、Executor状态信息给Cluster Manager等。

  • Executor
    执行计算任务的一线组件。主要负责任务的执行及与Worker、Driver的信息同步。

  • Driver
    Application的驱动程序,Application通过Driver与Cluster Manager、Executor进行通信。Driver可以运行在Application中,也可以由Application提交给Cluster Manager并由Cluster Manager安排Worker运行

  • Application
    用户编写的应用程序,Application通过Spark提供的API进行RDD的转换和DAG构建,并通过Driver将Application注册到Cluster Manager。Cluster Manager将会根据Application的资源需求,通过一级分配将Executor、内存、CPU等资源分配给Application。Driver通过二级分配将Executor等资源分配给每一个任务,Application最后通过Driver告诉Executor运行任务。

什么是RDD?

Resilient Distributed Datasets,弹性分布式数据集。是分布式内存的一种抽象概念,是一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,能横跨集群的所有节点进行并行计算,是一种基于工作集的应用抽象。

RDD底层存储:

RDD的数据分布存储于多台机器上(HDFS Block形式)

RDD中的Partition是一个逻辑数据结构,存储数据分区以及逻辑结构的映射关系,存储着RDD之前的依赖转换关系。

RDD的5个主要的属性

  1. 一组分片(Partition):数据集的基本组成单位。对于RDD来说,每个分片都会被一个计算任务(Task)处理,分区的数量决定了并行计算的粒度。RDD的并行度默认从父RDD传给子RDD。默认情况下,一个HDFS上的数据分片(Block)就是一个partition,HDFS文件的Block数决定了该RDD的分区数。也可以在创建RDD的时候指定RDD的分片个数,如果不指定分区数量,当RDD从集合创建时,默认分区数量为该程序多分配到资源的CPU核数(每个Core可以承载2-4个partition)。
  2. 一个作用于每个分区的函数:RDD中的计算是以分片为单位的,每个RDD都会实现compute函数,RDD的分片是并行计算的。
  3. RDD之间的依赖关系:RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后以来关系。在部分分区数据丢失时,Spark可以通过这个以来关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。
  4. 一个Partitioner:RDD的分片函数。只有对于Key-value类型的RDD,才会有Partitioner。Partitioner函数不但决定了RDD本身的分片数量,也决定了parent RDD shuffle输出时的分片数量。
  5. 一个存储每个Partition的优先位置列表(preferred location):对于一个HDFS文件来说,这个列表保存的就是每个Partition所在的快的位置。Spark在进行任务调度的时候,会尽可能地将计算任务分配到其索要处理数据块的存储位置(移动数据不如移动计算)。

Spark应用程序的执行过程?

  1. 构建Spark Application的运行环境(启动SparkContext),SparkContext向资源管理器(Standalone,YARN或Mesos)注册并申请运行Executor资源
  2. 资源管理器分配Executor资源并启动StandaloneExecutorBackend,Executor运行情况将随着心跳发送到资源管理器上
  3. SparkContext构建DAG图,将DAG图分解成STage,并把Taskset发送给TaskScheduler。Executor向SparkContext申请Task,TaskScheduler将Task发送给Executor运行,同时SparkContext将应用成怒代码发送给Executor
  4. Task在Executor上运行,运行完毕释放所有资源

Spark中cache和persist的区别?

cache和persist都是用于将一个RDD进行缓存的,这样在之后使用的过程中就不需要重新计算了,可以大大节省程序运行时间。

cache只有一个默认的缓存级别MEMORY_ONLY,cache调用了persist,而persist可以根据情况设置其他的缓存级别。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容