分类 大数据 中的文章

Parquet for Spark

Spark执行Delta的过程,通过自定义的format格式,到DataFrameWriter.saveToV1Source,在是到DeltaDataSource#createRealation,写入做优化事务处理,再用FileFormatWriter创建多个Task并行写入,之后就是到Parquet内部执行阶段。Parquet包含Row Groups,往下是Column Chunk,再往下是Page,文件尾部包含Footer和一些元数据信息。Spark是按行写入的,一次写一行,每行写对应的 column。Parquet编码包括Dictionary Encoding、Run Length Encoding (RLE)、Delta Encoding。读取的主要类是VectorizedParquetRecordReader执行一批读取,调用VectorizedColumnReaders(对应每个column),再调用VectorizedValuesReader(读取一个column中的一段数据),返回由上层应用消费 。

阅读全文

Spark-Streaming 原理

spark streaming的基本原理,包括MicroBatchExecution,ContinuousExecution,通过IncrementalExecution + 状态实现micro-batch 并复用了spark 的所有查询逻辑;Source接口支持 getOffset,commit,可以自定义各种扩展实现;Sink包括:FileStreamSink、KafkaSink、DeltaSink、、ForeachBatchSink,ForeachWriteTable;Stateful将信息存如StateStoreRDD,保存到 HDFSBackedStateStoreProvider、RocksDBStateStoreProvider 中;Stream-Stream Join使用了StreamingSymmetricHashJoin,需要保证状态;Session Window同样也是通过插入一些流相关的算子 + 状态保存实现的

阅读全文

Compaction in Apache Iceberg

压缩,可以将多个小文件合并为大文件提高读性能,几种压缩策略:binpack(简单合并)、sort、z-order(适合多列查询),Expire Snapshots 可以删除过期的数据文件,还提供了参数可以自动删除manifest 文件、保留多少manifest文件,以及清除orphan 文件

阅读全文

The Life of a Read/Write Query for Apache Iceberg Tables

介绍了存储的结构,元数据层包括:manifest files、manifest list, metadata files,catalog指向最新的 metadata files;每一层都可以做裁减,包括数据层,介绍了读取、time travel过程,是自上往下的读取和裁减过程;写入过程:插入、删除、merge过程,写 过程是自下而上的,通过 切换catalog指向,利用OCC控制并发,实现ACID

阅读全文

Analyzing and Comparing Lakehouse Storage Systems

讨论了 LakeHouse 系统设计的难点,在不可变高延迟的对象存储之上,增加事务特性,三大系统都使用了OCC做隔离,事务实现都用了MVCC,源数据库管理delta和hudi用了表格式,iceberg用了层次存储(单节点处理),数据更新三者都支持CoW(适合读多写少场景),hudi和iceberg支持MoR(适合写多的场景)

阅读全文

The History of Big data

从谷歌的三篇论文到Hadoop的诞生,再是各种开源产品依次出现,Hive对MapReduce的易用性改进,三大Hadoop 供应商,谷歌新三篇论文诞生了交互式查询(三大供应商推出)以及各种开源存储格式,Spark的出现和各种流处理系统,Netflix也证明了云的强大,流批一体以及各种分布式调度系统,基于云的数仓产品出现,HDFS替换上云、容器化出现、全托管数仓Modern Data Stack、深度学习对Hadoop的影响,三大供应商被收购,三大开放表格存储的出现,几个元数据管理产品,几个新的调度框架,LakeHouse的出现以及相关类似云产品

阅读全文