Aiden Blog

ORC | ORC 概述

背景 多年来 Hive 的 RCFile 是Hadoop用于存储表格数据的标准格式。 但是 RCFile 有局限性,因为它将每一列视为没有语义的二进制Blob。 在Hive 0.11中,我们添加了一个名为优化行列式文件(ORC)的新文件格式,该文件使用并保留表定义中的类型信息。 ORC使用特定类型的读取器和写入器,提供轻量级压缩技术,如字典编码、位填充、增量编码和RLE编码,从而导致文件...

Spark 技术 | Spark Shuffle 解读

过上篇 SparkRDD解读文章 我们可以了解到,对于每个 ShuffleDependency会生成 ShuffleMapStage,ShuffleMapStage 对应生成 ShuffleMapTask。 在ShuffleMapTask 中将计算对应的RDD分区数据,然后将结果通过ShuffleManager写出去。 // ShuffleMapTask.scala override d...

Spark 技术 | Spark RDD 原理解读

RDD 介绍 我们提出了弹性分布式数据集(RDDs),这是一种分布式内存抽象,使程序员能够在大型集群上以容错的方式执行内存计算。 RDDs的动机来自于两种类型的应用,这些应用在当前的计算框架中处理效率低下:迭代算法和交互式数据挖掘工具。在这两种情况下,将数据保留在内存中可以将性能提高一个数量级。 为了实现高效的容错性,RDDs提供了一种受限的共享内存形式,基于粗粒度的转换,而不是对共享...

Hadoop 技术 | InputFormat相关逻辑整理

Hadoop MapReduce 任务读取主要是通过 InputFormat 类来完成的, 他主要的功能是将要读取的文件集合切分成多个分片,每一个分片对应一个数据读取任务。 当任务开始运行时,每个任务依次遍历迭代获取一条有效记录,以此来将数据读取完成。 getSplits(jubContext:JobContext):List<InputSplit> 的主要作用是获取任务...

Java 教程 | CompletableFuture 介绍

CompletableFuture 是jdk8的新特性。CompletableFuture实现了CompletionStage接口和Future接口,前者是对后者的一个扩展,增加了异步会点、流式处理、多个Future组合处理的能力,使Java在处理多任务的协同工作时更加顺畅便利。 创建异步任务 supplyAsync supplyAsync 是创建带有返回值的异步任务。它有如下两个方法...

Avro 的基本使用 | Avro 篇

Apache Avro 是一个数据序列化系统。 Avro 提供: 丰富的数据结构。 一种紧凑、快速的二进制数据格式。 一个容器文件,用于存储持久数据。 远程过程调用 (RPC)。 与动态语言的简单集成。代码生成不需要读取或写入数据文件,也不需要使用或实现 RPC 协议。代码生成作为一种可选的优化,只值得为静态类型语言实现。 Avro 依赖于Schema。在读取或者...

Leveldb MVCC实现细节 | leveldb 篇

leveldb 使用VersionSet来维护SST的变更记录,SST的变更主要发生在Compaction环节,分为Minor compaction与Major compaction。 Minor compaction发生在MemTable数据容量超过限制溢出到SST。 Manor compaction发生在sst达到了触发合并条件,数据写出到下一层level. VersionSet...

Leveldb 数据读取流程 | leveldb 篇

leveldb 数据读取经过三个阶段 : 从MemTable中查找数据 从IMemTable(将要被刷到磁盘的MemTable)中查找数据 从SST中查找数据 // db_impl.cc // DBImpl::Get 方法 { mutex_.Unlock(); LookupKey lkey(key, snapshot); ...

Leveldb 数据写入流程 | leveldb 篇

LevelDB 数据插入大致分成两个阶段: 写内存,写磁盘 用户当前插入的数据会被记录在MemTable中,这是一个基于内存的数据查询引擎。 当MemTable中数据插入超过一定的容量后,此时会重新开一个MemTable, 用于应对客户端的写请求。 写满的MemTable将会被异步刷盘,形成SSTable. key细节部分 用户提交的key(UserKey)在level...

SSTable 文件格式 | leveldb 篇

前言 leveldb 将持久化的数据分成若干个sst文件来保存, sst 分成若干层,最高到第7层[0,1,2,3,4,5,6] sst文件名格式为 {file_number}.ldb, 如上所示, leveldb定期将内存中存满的数据落地到磁盘形成SST 因为level0层SST是从MemTable中dump下来的,所以SST之间数据可能存在重叠,但是它也有新旧之分,ss...