spark

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AM...
    大佛爱读书阅读 7,819评论 0 20
  • Spark学习笔记 Data Source->Kafka->Spark Streaming->Parquet->S...
    哎哟喂喽阅读 11,674评论 0 51
  • spark-submit的时候如何引入外部jar包 在通过spark-submit提交任务时,可以通过添加配置参数...
    博弈史密斯阅读 7,851评论 1 14
  • RDD的概述 RDD是只读的、分区记录的集合,是Spark编程模型的最主要抽象,它是一种特殊的集合,支持多种数据源...
    木戎阅读 8,498评论 0 2
  • 临摹作品。 纸:宝虹粗纹 颜料:nicker不透明水彩 笔:杂牌笔。
    普林赛斯阅读 2,649评论 4 7