码迷,mamicode.com
首页 > 其他好文 > 详细

spark 笔记

时间:2015-07-01 23:28:09      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

  1. 分布式计算,数据尽量在本地计算,减少网络I/O
  2. 如果操作之间相互关系不大,则尽量采用分布式计算。

 

技术分享

 

spark采用分布式计算中的master-slave模型,master对应含有master进程的节点,slave对应含有worker进程的节点。Client 负责提交应用,driver负责控制应用的执行。

 

基本组件

  • Cluster managermaster节点,控制整个集群
  • Worker: 计算节点
  • Driver: 运行application main函数 并创建 spark context
  • Executor: 用于启动线程池执行任务,每一个application拥有一组独立的 Executor
  • Spark context: 整个应用的上下文,控制应用的生命周期
  • RDD DAG 一组RDD构成的有向无环图。当RDD遇到一个action算子时候,将之前所有的算子形成一个rdd graph. 并把这个rdd graph转化为job提交到cluster中执行
  • Job. 一个Rdd Graph触发的作业。往往由Spark Context通过 runJob方法向spark 提交job
  • DAG scheduler. 每个job会根据RDD DAG构建 Stage DAG 并把stage交给 Task Scheduler
  • Task Scheduler: task 分发给 task scheduler
  • SparkEnv: 线程级别的上下文

Spark Env包括以下几部分

  1. MapOutPutTracker: 负责 Shuffle元信息的存储
  2. BroadcastManager: 负责广播变量的控制和元信息的存储
  3. BlockManger: 负责存储管理,创建和查询块
  4. MetricsSystem: 监控运行时性能指标信息
  5. SparkConf: 负责存储配置信息

 

spark主要流程

  1. Client 提交应用给 master
  2. master启动一个worker来执行 driver
  3. driver生成 RDD Graph 再由 DAG scheduler转化为 Stage DAG
  4. Dag scheduler提交 stage dagtask scheduler
  5. Task scheduler提交 taskexcutor

 

RDD两种创建方式

  1. 从已有的rdd 转换生成
  2. hdfs中读取

 

RDD 相关

  1. 逻辑上的RDD的每个分区叫一个partition
  2. 一个变换将一个RDD变换成另外一个RDD,这些RDD之间通过Lineage产生依赖关系
  3. 分区只是一个逻辑概念,变换前和变换后的分区可能是同一块内存存储
  4. 有些RDD是计算的中间结果,不一定有物理的存储空间与之对应,如果需要迭代使用数据,可以调用cache()函数来缓存数据
  5. 在物理上,RDD对象实质上是一个元数据结构,存储着Block, Node等的映射关系,以及其他的元数据信息。
  6. 一个RDD就是一组分区,每个分区就是一个block block可以存储在内存中,如果内存不够时可以存储在磁盘上 

Note: 如果是从HDFS等外部存储结构中读取数据,数据则按照HDFS中的数据分布策略进行数据分区,HDFS中的一个block对应spark的一个分区 

  1. spark支持重分区,数据通过spark默认或者用户自定义的分区器进行分区,决定数据块分布在哪些节点上。

 

 

Transformation 算子

  1. 输入输出分区一对一型

    1. Map. 将原有的Rdd中的数据项通过用户自定的function map成新的元素。得到一个类型为MappedRDD的新RDD
    2. Flatmap. 将原有RDD中的元素通过函数f转换为新的元素,并将生成的RDD合并为一个集合。 得到一个类型为FlatMappedRDD的心RDD
    3. Map patitions. 获取每个分区的迭代器,在函数中通过这个分区整体的迭代器对整个分区进行操作。得到一个新的类型为MapPartitionsRDD 的新RDD
    4. Glom. glom函数将每个分区形成一个数组。得到一个新的GlommedRDD
  2. 输入和输出分区多对一

    1. Union.
      1. 保证两个RDD中的数据类型是相同的。
      2. 合并后类型和原有类型相同
      3. 不进行去重操作,如果想去重可以使用distinct
      4. ++ 相当于union操作
    1. Cartesian. 对两个集合的素有元素做笛卡儿积
  1. 输入输出多对多

    1. Groupby. 将元素按照function生成key,数据转化为key-value格式,之后将key相同的元素分为一组。
  2. 输出是输入分区的子集。

    1. Filter. 对元素应用function过滤。 生成一个新的filtered RDD
    2. Distinct 将元素去重。
    3. Subtract. 将元素进行集合的差操作。
    4. Sample. RDD集合内的元素进行采样,获取子集。 用户可以指定采样方式。
    5. Takesample. sample类似,但是不指定采样的比例而是指定采样个数。
  1. cache型算子

    1. Cache. RDD元素缓存到内存。相当于persist(MEMORY_ONLY).
    2. Persist. RDD进行缓存操作。数据缓存在什么地方,由storage level枚举类型决定。

 

Action 算子

  1. 无输出
    1. Foreach.
    2. SaveAsTextFile. 将数据输出,存储在指定的HDFS目录。

 

 

 

 

spark 笔记

标签:

原文地址:http://www.cnblogs.com/shexinwei/p/4614697.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!