`
zhaomengsen
  • 浏览: 207674 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

BlockStore

 
阅读更多
private[spark] abstract class BlockStore(val blockManager: BlockManager) extends Logging {

  def putBytes(blockId: BlockId, bytes: ByteBuffer, level: StorageLevel): PutResult

  /**
   * Put in a block and, possibly, also return its content as either bytes or another Iterator.
   * This is used to efficiently write the values to multiple locations (e.g. for replication).
   *
   * @return a PutResult that contains the size of the data, as well as the values put if
   *         returnValues is true (if not, the result's data field can be null)
   */
  defputIterator(
    blockId: BlockId,
    values: Iterator[Any],
    level: StorageLevel,
    returnValues: Boolean): PutResult

  def putArray(
    blockId: BlockId,
    values: Array[Any],
    level: StorageLevel,
    returnValues: Boolean): PutResult

  /**
   * Return the size of a block in bytes.
   */
  def getSize(blockId: BlockId): Long

  def getBytes(blockId: BlockId): Option[ByteBuffer]

  def getValues(blockId: BlockId): Option[Iterator[Any]]

  /**
   * Remove a block, if it exists.
   * @param blockId the block to remove.
   * @return True if the block was found and removed, False otherwise.
   */
  def remove(blockId: BlockId): Boolean

  def contains(blockId: BlockId): Boolean

  def clear() { }
}



BlockStore 这个接口 实现了 两个功能 Disk

Spark 源码分析 -- BlockStore

BlockStore

抽象接口类, 关键get和put都有两个版本
序列化, putBytes, getBytes
非序列化, putValues, getValues

其中putValues的返回值为PutResult, 其中的data可能是Iterator或ByteBuffer

对应DiskStore其实很单纯, 就是打开相应的文件读或写.

上面奇葩的注释



  private def getBytes(file: File, offset: Long, length: Long): Option[ByteBuffer] = {
    val channel = new RandomAccessFile(file, "r").getChannel
    Utils.tryWithSafeFinally {
      // For small files, directly read rather than memory map

我理解这个意思  内存需要 整块对

读小文件 可以从硬盘读一小块

      if (length < minMemoryMapBytes) {
        val buf = ByteBuffer.allocate(length.toInt)
        channel.position(offset)
        while (buf.remaining() != 0) {
          if (channel.read(buf) == -1) {
            throw new IOException("Reached EOF before filling buffer\n" +
              s"offset=$offset\nfile=${file.getAbsolutePath}\nbuf.remaining=${buf.remaining}")
          }
        }
        buf.flip()
        Some(buf)
      } else {
        Some(channel.map(MapMode.READ_ONLY, offset, length))
      }
    } {
      channel.close()
    }
  }






分享到:
评论

相关推荐

    BlockStore是一个纯原生JavaScript开发块分配的高速存储键值文件

    BlockStore是一种专为JavaScript环境设计的高性能键值存储系统,它充分利用了JavaScript的特性来实现高效的数据存储和检索。在JavaScript开发中,数据存储通常是一个关键的性能瓶颈,尤其是在处理大量数据时。Block...

    tm-tools:一些用于minimmint blockstore.db或state.db的有用工具

    TM工具有两种用于招标数据的工具: tm-migrator :将招标公告数据从v0.7.3迁移到v0.10.0 tm-viewer :查看blockstore.db或state.db中的blockstore.db薄荷数据迁移器 Usage: tm_migrator -old tmroot -new tmroot -...

    ark-blockstore-rook:Heptio Ark的Rook插件

    部署Rook( ) 部署Rook Api( kubectl apply -f https://raw.githubusercontent.com/stevesloka/ark-blockstore-rook/master/rest-api/deployment.yaml ) 部署Ark Prereqs :( kubectl apply -f ...

    spark-redis-blockstore:Apache通过Redis剥离堆缓存块管理器-请参阅https

    spark-redis-blockstore Apache通过Redis剥离堆缓存块管理器 配置 请参阅以下SparkConf设置以获取OFF_HEAP缓存以与Redis一起使用: conf = new SparkConf (). set( " spark.externalBlockStore.blockManager " , ...

    碳水化合物::hamburger:汽车(只读)BlockStore

    :hamburger: 碳水化合物Car Blockstore提供了一个只读的blockstore接口,可以直接从car文件中读取信息。执照Carbs根据Apache 2.0和MIT条款获得了双重许可: Apache License, Version 2.0, (LICENSE or ...

    registry-playground:BIP32,JWT,XDI,Blockstore等的注册表游乐场

    BIP32,JWT,XDI,Blockstore等的注册表游乐场见 基于以下工具: (用于创建BIP39助记词) (用于创建和派生HD密钥) (用于创建使用secp256k1签名的JWS) (用于解析JWS) (对于XDI)

    Python库 | mypy_boto3_ebs-1.14.40.0-py3-none-any.whl

    标题中的“mypy_boto3_ebs-1.14.40.0-py3-none-any.whl”是一个Python库的发行版本,这表明它是一个用于类型检查和AWS EBS(Elastic Block Store)操作的工具。让我们深入探讨这个库所涉及的知识点。 **mypy**: ...

    PyPI 官网下载 | mypy-boto3-ebs-1.15.6.0.tar.gz

    这个库是PyPI官网提供的,旨在帮助开发者更有效地与Amazon Elastic Block Store (EBS)服务进行交互。 首先,我们来了解mypy。mypy是一个静态类型检查器,它允许Python开发者在不牺牲动态语言灵活性的前提下,引入...

    互联网云计算入门资料介绍

    "Amazon Elastic Block Store.doc"介绍了Elastic Block Store (EBS),这是亚马逊AWS的一种持久性块存储服务,为EC2实例提供高性能的数据存储,适用于数据库和其他需要低延迟、高I/O性能的应用。 "云计算基础技术...

    Python库 | mypy_boto3_ebs-1.14.36.0-py3-none-any.whl

    本文将详细介绍Python库mypy_boto3_ebs,这是一个专为增强类型检查并支持与Amazon Elastic Block Store (EBS)交互的库,版本号为1.14.36.0。 首先,mypy_boto3_ebs是基于mypy和boto3的扩展。mypy是Python的一个静态...

    PyPI 官网下载 | mypy-boto3-ebs-1.18.24.tar.gz

    这个库是针对Boto3的一个类型检查扩展,用于增强Boto3 EBS(Elastic Block Store)组件的类型安全。 描述中提到的“资源全名:mypy-boto3-ebs-1.18.24.tar.gz”进一步确认了我们正在处理的是一个特定版本的压缩包,...

    Python库 | mypy-boto3-ebs-1.12.5.0.tar.gz

    而boto3则是Amazon Web Services (AWS) 官方的Python SDK,用于与AWS服务进行交互,包括Amazon Elastic Block Store (EBS)。当这两个强大的工具结合在一起,就形成了mypy-boto3-ebs库,它为开发者提供了更安全、更...

    Amazon AWS Certified Solutions Architect 80题.pdf

    文档的第一题关注的是存储在Amazon Elastic Block Store(EBS)上的数据在静止状态下的加密。EBS是AWS提供的一个块级存储服务,它能附加到Amazon Elastic Compute Cloud(EC2)实例。针对这一题,题目要求选择三个能...

    Python库 | mypy_boto3_ebs-1.15.1.0-py3-none-any.whl

    Python库 `mypy_boto3_ebs` 是一个专门针对AWS(Amazon Web Services)的Elastic Block Store(EBS)服务进行类型检查的工具。它与`boto3`库结合使用,`boto3`是AWS的官方SDK,用于Python开发人员与AWS服务进行交互...

    SAA-C03.pdf

    #### 四、Amazon EC2 实例与Amazon Elastic Block Store (EBS) - **Amazon EC2 实例**: - **定义**:EC2是AWS提供的一种可扩展的云服务,使用户能够在虚拟服务器上运行应用程序。 - **应用场景**:适合于托管...

    PyPI 官网下载 | mypy_boto3_ebs-1.14.42.0-py3-none-any.whl

    6. **AWS EBS**:Amazon Elastic Block Store是AWS云中的一个服务,提供持久性的块级存储卷,常用于EC2实例的数据存储。`mypy_boto3_ebs`库可能提供了方便操作EBS的API,如创建、附加、管理卷等。 7. **pip**:...

    Python库 | mypy-boto3-ebs-1.18.55.tar.gz

    【Python库 | mypy-boto3-ebs-1.18.55.tar.gz】是一个针对AWS(Elastic Block Store)服务的类型注解增强版本的Boto3库,用于Python开发。Boto3是Amazon Web Services (AWS)的官方SDK,提供对所有AWS服务的全面支持,...

    AWS Mgmt Console Getting Started Guide.pdf

    - **Amazon Elastic Block Store (EBS)**:提供持久化块存储卷。 - **Amazon EBS卷**:独立于运行实例的存储设备。 - **Amazon EBS快照**:卷的备份,可用于恢复数据或创建新卷。 - **步骤** - **创建EBS卷**:...

    AWS web services

    **Amazon Elastic Block Store** 为 Amazon EC2 实例提供持久的块级存储卷。每个 Amazon EBS 卷都在其可用区内部自动复制,以防止组件故障,从而提供高可用性和耐用性。 #### 三、总结 综上所述,AWS 提供了广泛且...

    AWS课堂笔记,重点知识点

    AWS 提供了多种存储服务,包括 Amazon S3、Amazon EBS、Amazon Elastic Block Store 等。Amazon S3 是对象级别的存储,一个对象包括文件数据、元数据和一个唯一标识符。 数据库服务 AWS 提供了多种数据库服务,...

Global site tag (gtag.js) - Google Analytics