您当前的位置:都市生活圈资讯正文

Spark必知必会的基本概念

放大字体  缩小字体 2019-11-11 17:02:20  阅读:1407 作者:责任编辑NO。卢泓钢0469

首要咱们从微观的视角来窥探下大数据技能结构:

图1 大数据技能结构

从图1能够精确的看出,数据源-数据搜集-数据存储-资源办理,这是咱们进行数据剖析和处理的根本;图中的核算结构包含批处理、交互式剖析和流处理:

批处理核算:对时间没有严格要求,吞吐率要高

交互式核算:支撑类SQL言语,快速进行数据剖析

流式核算:数据像流水相同进入体系,需实时对其处理和剖析

不同的核算结构的实时性要求是逐步增强的,spark在整个大数据技能结构中归于第4层核算结构,spark能很好地满意这三种核算要求,这也是spark这么火的原因之一;对数据进行核算后,咱们便能够对数据进行剖析,练习机器学习模型等;将数据剖析或练习得到的成果可视化并展现给用户或许供给一些智能服务,然后获取商业价值。

spark 生态体系

图2 spark 生态体系

spark数据一般放在散布式存储体系里,比方HDFS、Hbase

HDFS的根本原理是将文件切分红等大的数据块(block,默许128MB),存储到多台机器上,这是一个容量巨大、具有高容错性的磁盘。一般的架构是一个NameNode(寄存元数据)多个DataNode,为防止namenode宕机,有一个备用的NameNode:Standby NameNode。

图3 HDFS架构

spark的资管办理与调度运用YARN,spark能够运转在YARN之上,YARN能够对多种类型的使用程序进行统一办理和调度,spark四个首要模块:spark SQL,Spark Streaming,Graphx Graph-parallel,MLlib。

spark的出现时为了处理MapReduce结构的局限性,但并不是在任何状况下,spark都比MapReduce高效。

MapReduce结构局限性

仅支撑Map和Reduce两种操作,而spark支撑丰厚的Transformation和Action的api

处理功率低效

当一个核算逻辑很杂乱的时分,会转换成多个MapReduce作业,而每个MapReduce作业都重复对磁盘进行读写,磁盘IO是个十分耗时的操作:Map的中心成果写入磁盘,Reduce写HDFS,多个MR之间经过读取HDFS来交流数据(**为何需求用磁盘呢?**MapReduce提出来大约是04年的时分,那个时分内存还很贵,所以需求很多存储空间的一个较好的解放计划便是运用磁盘,但现在内存的价格和当年磁盘的价格差不多,而磁盘的价格现已和磁带的价格差不多了)

使命调度和发动开支大

无法充沛的运用内存

Map端和Reduce端均需求排序

不适合迭代核算(如机器学习、图核算等),交互式处理(数据发掘) 和流式处理(点击日志剖析)

MapReduce编程不行灵敏,是时分测验scala函数式编程言语

并且大数据核算结构多样,各自为战:

批处理:MapReduce、Hive、Pig

流式核算:Storm

交互式核算:Impala

而spark可一起进行批处理、流 式核算、交互式核算,削减了运用者的学习本钱。

spark特色

高效(比MapReduce快10~100倍)

内存核算引擎,供给Cache机制来支撑需求重复迭代核算或许屡次数据同享,削减数据读取的IO开支,有必要留意一下的是,spark并不是将一切的数据都写入内存,相反spark默许是将数据写入磁盘,但spark支撑将数据写入内存并核算。

运用DAG(有向无环图)引擎,能够大大削减屡次核算之间中心成果写到HDFS的开支

运用多线程池模型来削减task发动开稍,shuffle过程中防止 不必要的sort操作以及削减磁盘IO操作

易用

供给了丰厚的API,支撑Java,Scala,Python和R四种言语

代码量比MapReduce少2~5倍

与Hadoop完美集成

可读写HDFS/Hbase

可与YARN集成

Spark中心概念

RDD:Resilient Distributed Datasets,弹性散布式数据集,与Java里的调集相似,但它多了两个前缀修饰词:散布式、弹性

散布式:用户看到的是一个RDD调集,可是后台是散布在集群中不同的只读目标调集(由多个Partition构成)

弹性:数据能够存储在磁盘或内存中(多种存储等级)

图4 RDD

RDD的两类根本操作:Transformation和Action

Transformation:经过Scala调集或许Hadoop数据集结构一个新的RDD,经过已有的RDD发生新的RDD,比方:map, filter,groupBy,reduceBy。Transformation是慵懒履行的,即只会记载RDD转化联系,并不会触发实践核算,知道遇到一个action才会触发。

Action:经过RDD核算得到一个或许一组值,比方:count,reduce,saveAsTextFile。Action会触发程序散布式履行

图5 RDD 慵懒执 行

Spark RDD Cache

经过上面咱们咱们能够知道,spark的首要特色:高效是由于运用了Cache机制来进行迭代核算,一起RDD的弹性也是由于数据可选择是寄存在内存仍是磁盘中,spark RDD cache答应将RDD缓存到内存中或磁盘上,以便于重用:

val data = sc.textFile(“hdfs://nn:8020/input”)

data.cache() //其实便是data.persist(StorageLevel.MEMORY_ONLY)

//data.persist(StorageLevel.DISK_ONLY_2)

spark 程序架构

咱们来剖析下一个spark程序的架构,每一个程序的main函数运转起来都由两类组件构成:Driver和Executor,main函数运转在Driver中,一个Driver能够转化为多个Task,每个Task都可被调度运转在指定的Executor中。

图6 spark 程序架构

spark的运转形式

spark的运转形式有三种,能够在$SPARK_HOME/conf/spark-defaults.conf中运用spark.master来指定:

local(本地形式):将Spark使用以多线程方法,直接运转在本地,便于调试

local:只发动一个executor

local[K]:发动K个executor

local[*]:发动跟cpu数目相同的executor

standalone(独立形式):独立运转在一个集群中,Master-Slave

YARN/mesos:运转在资源办理体系上

yarn-client:Driver运转在本地,而Executor运转在YARN,Driver一旦宕机,需求自己重启,容错差

yarn-cluster:Driver运转在集群中(NodeManager),Driver一旦宕机,会主动再找一个NodeManager来发动,容错好

yarn-client内部处理逻辑

yarn-client形式下,Driver是运转在Client上的,spark程序是在哪台机器上提交的,这个Driver就运转在哪台机器上,也便是main函数运转在哪台机器上,当提交你的程序到yarn上时,背面发生了什么?

假定现在有四个服务器组成的yarn集群,一个为Resource Manager,其他三个为Node Manager,当Node Manager发动的时分会将Node Manager上的信息注册到Resource Manager中,在本地布置好hadoop环境之后即可提交spark程序(1),Resource Manager会发动一个Node Manager(2);再由Node Manager来发动你的Application Master(3);Application Master需求的资源是由你运转的程序所指定的,Application Master发动后会与Resource Manager通讯,为executor恳求资源(4),假如一个executor挂了,Application Master会从头向Resource Manager恳求一个executor并发动在某个Node Manager上,那么假如是Node Manager挂了,Application Master会向Resource Manager恳求相同数量的executor并发动;executor具有资源后,Application Master会与Node Manager通讯来发动executor(5、6),每个executor与在客户端Client上的Driver通讯收取task(虚线部分)

图6 程序运转形式:YARN散布式形式(yarn-client)

Resource Manager:一个中心的办理服务,决议了哪些使用能够发动executor进程,以及何时何地发动

Node Manager:一个在每个节点运转的从服务,真实履行发动executor进程,一起监控进程是否存活以及资源耗费状况

Application Master:在 YARN 中,每个使用都有一个 Application master 进程,这是发动使用的第一个容器。这个进程担任向 ResourceManager 恳求资源,当资源分配完结之后,向 NodeManager 发送发动容器的指令。

【免责声明】:本文仅代表作者本人观点,与本网站无关。本网站对文中陈述、观点判断保持中立,不对所包含内容的原创性、准确性、真实性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,本站不承担任何直接责任及连带责任。