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