文档章节

Spark(Storeage)

赵-猛
 赵-猛
发布于 2017/06/17 11:57
字数 637
阅读 4
收藏 0

存储管理

    diskstore
    memorystore


一大组件

  BlockManager

 

消息通信(Actor模型)

    master(BlockManager) to slave(BlockManager)
    slave(BlockManager) to master(BlockManager)


    
RDD/Block

  在调度层, RDD由多个partition/bucket构成
  在存储层, RDD又是以block为单位进行存取,
     对于DiskStore,则一个blcok一个物理文件,再由hash map管理id和路径
     对于MemoryStore,则直接由HashMap管理id和block
  在task的rdd.iterator()中,即partition/bucket要进行运算时,会处理通过BlockManager管理block

  (rdd的partition和block为一一对应)

 

spark 中的block是rdd在被task执行之前,其基本组成partition被blockManage映射而来的一种抽象
spark 中,在storage模块里面所有的操作都是和block相关的,但是在RDD里面所有的运算都是基于partition的
如果当前RDD的storage level不是NONE的话,表示该RDD在BlockManager中有存储,那么调用CacheManager中的getOrCompute()函数计算RDD,
在这个函数中partition和block发生了关系:
  首先根据RDD id和partition index构造出block id (rdd_xx_xx),接着从BlockManager中取出相应的block
需要注意的是block的计算和存储是阻塞的,若另一线程也需要用到此block则需等到该线程block的loading结束

(hdfs 中的 block 是存储的最小单元)

spark中的RDD-Cache, Shuffle-output, 以及broadcast的实现都是基于BlockManager来实现, BlockManager提供了数据存储(内存/文件存储)接口.
这里的Block和HDFS中谈到的Block块是有本质区别:
  HDFS中是对大文件进行分Block进行存储,Block大小固定为512M等;
  Spark中的Block是用户的操作单位, 一个Block对应一块有组织的内存,一个完整的文件或文件的区间端,并没有固定每个Block大小的做法;
  
(hdfs 中的 block 是存储的最小单元)

trait BlockDataManager {
  def getBlockData(blockId: String): Option[ManagedBuffer]
  def putBlockData(blockId: String, data: ManagedBuffer, level: StorageLevel): Unit
}

Spark中Block类型

    RDDBlock:"rdd_" + rddId + "_" + splitIndex; 即每个RDD block表示一个特定rdd的一个分片
    ShuffleBlock:关于shuffle,在Spark的1.1版本中发布一个sort版本的shuffle,原先的版本为hash,因此两种类型的shuffle也对应了两种数据结构
        Hash版本,ShuffleBlock:"shuffle_" + shuffleId + "" + mapId + "" + reduceId
        Sort版本,对于每一个bucket(shuffleId + "" + mapId + "" + reduceId组合)由ShuffleDataBlock和ShuffleIndexBlock两种block组成
            "shuffle_" + shuffleId + "" + mapId + "" + reduceId + ".data"
            "shuffle_" + shuffleId + "" + mapId + "" + reduceId + ".index"
    BroadcastBlock:"broadcast_" + broadcastId + "_" + field)
    TaskResultBlock:"taskresult_" + taskId;Spark中task运行的结果也是通过BlockManager进行管理
    StreamBlock: "input-" + streamId + "-" + uniqueId应该是用于streaming中
    TempBlock: "temp_" + id

 

© 著作权归作者所有

共有 人打赏支持
赵-猛
粉丝 4
博文 739
码字总数 446937
作品 0
深圳
技术主管
你不能错过的 spark 学习资源

1. 书籍,在线文档 2. 网站 3. Databricks Blog 4. 文章,博客 5. 视频

u012608836
04/12
0
0
Spark 1.4.1 Standalone 模式部署安装配置

各节点执行如下操作(或在一个节点上操作完后 scp 到其它节点): 1、 解压spark安装程序到程序目录/bigdata/soft/spark-1.4.1,约定此目录为$SPARKHOME tar –zxvf spark-1.4-bin-hadoop2.6....

山疯
2015/08/12
0
0
Spark 学习资源收集【Updating】

(一)spark 相关安装部署、开发环境 1、Spark 伪分布式 & 全分布式 安装指南 http://my.oschina.net/leejun2005/blog/394928 2、Apache Spark探秘:三种分布式部署方式比较 http://dongxic...

大数据之路
2014/09/08
0
1
Hadoop CDH5 Spark部署

Spark是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速,Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark ...

China_OS
2014/05/30
0
0
教你如何成为Spark大数据高手

Spark目前被越来越多的企业使用,和Hadoop一样,Spark也是以作业的形式向集群提交任务,那么如何成为Spark大数据高手?下面就来个深度教程。 分享之前我还是要推荐下我自己创建的大数据学习交...

风火数据
05/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

这些Spring中的设计模式,你都知道吗?

设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆。 Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行...

Java填坑之路
36分钟前
1
0
Spring Aop原理之Advisor过滤

在上文(Spring Aop之Advisor解析)中我们讲到,Spring Aop对目标bean的代理主要分为三个步骤:获取所有的Advisor,过滤当前bean可应用的Advisor和使用Advisor为当前bean生成代理对象,并且上文...

爱宝贝丶
46分钟前
0
0
JMockit学习教程

1 JMockit中文网 我觉得如果仅仅是开发自测的话,把JMockit中文网认真看一遍,就可以在项目中使用JMockit了。 http://jmockit.cn/index.htm 2 JMockit中文教程 官方文档中文版。对于不喜欢看...

SuperHeroes
58分钟前
0
0
Linux服务器几乎从不采用Arch Linux?

我们见得多的Linux服务器系统一般都是什么Ubuntu Server啊,什么Cent OS啊,什么Fedora啊,或者企业采用的Red Hat啊,为什么几乎没有Arch Linux呢?下面我将从若干个方面指出Arch Linux在服务...

linux-tao
今天
0
0
js 函数柯里化 闭包

参考 https://mp.weixin.qq.com/s/GEHL3jarDdAAcr5tQGjmDg 一个统计求和的函数 需要知道整个数组的信息,然后遍历求值 function countMoney() { let money = 0 // 温馨提示:arguments...

阿豪boy
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部