spark

作者: ThomasAAnderson | 来源:发表于2019-08-14 19:48 被阅读0次

Spark比hadoop快的原因

1中间结果基于内存

2dag

3以线程为单位,开销更小(不确定)

Spark core:

弹性分布式数据集(Resilient Distributed Dataset,RDD )。RDD就是带有分区的集合类型

rdd的五大特性:

1由一系列partition组成

2算子作用在partition上

3rdd之间有依赖关系

4分区器作用在k,v格式的rdd上(分区:主要通过compute函数)

5partition提供计算位置,利于数据本地化

spark读取hdfs的数据的方法:

textfile,底层调用的是mr读取hdfs的方法(split的block对应rdd的partition)

弹性分布式数据集(RDD),他是一个弹性的,可分区的,分布式计算的集合。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。

弹性的体现:

存储弹性:内存和硬盘可以互相切换

容错弹性:通过依赖关系,计算丢失自动恢复

计算弹性:partition可多可少

分布式的体现:

rdd的partition分布在多个节点

代码流程:

1、配置sparkconf  

val conf = new sparkconf

conf.xxx

2、创建sparkcontext对象

val sc = new sparkcontext(conf)

val lines = sc.textfile(path="./xx/xx")

3、创建rdd,对rdd进行处理

4、action触发transformation执行

val rdd = lines.flatmap(one=>{one.split(" ")}).foreach(println)

5、关闭sparkcontext

sc.stop()

DAG:

原始RDD的通过一系列转换和执行来生成RDD之间的依赖关系,这个计算链就是逻辑上的DAG(有向无环图),lineage就是一条依赖关系,多条lineage可以组成DAG

针对RDD的算子操作,分三种:

一种是Transformation(变换),用来构建RDD血缘关系,属于懒操作,不会真正触发RDD的处理计算,比如map(一对一),flatmap(一对多),filter,groupbykey。

另一种是Actions(执行),它才会真正触发计算,一个action一个job。比如count,reduce,first,take(n),返回的不是rdd就可能是actions

持久化算子:将计算结果持久化到内存,不需要重复计算

    cache:默认存在内存中

    persist:手动指定级别

    checkpoint: 持久化到指定目录,血缘关系非常复杂可以使用,可以切断依赖关系

宽依赖:子rdd分区与父rdd分区多对多,

窄依赖:子rdd与父rdd分区一对一

缓存作用:保存血缘关系

检查点:血缘关系太长而设置,类似于快照

任务分为app,job,stage,task

相关文章

网友评论

      本文标题:spark

      本文链接:https://www.haomeiwen.com/subject/ghevjctx.html