Google宣布Dataproc服务将开始支持表格格式,用户已经可以在最新的Dataproc 1.5预览版,使用Delta Lake以及Apache Iceberg项目,将数据存储成表格,另外,在Dataproc 1.3也开始支持Apache Hudi,可对数据进行渐增处理,在记录层级(Record-Level)执行插入、更新和删除动作。
Google提到,由于Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)以及对象存储,都被设计成文件系统,而非用来支持交易,因此在分布式处理环境要实例交易功能并不容易,因为开发者需要考量对存储系统进行锁定访问,但是这样又会影响整体系统的数据吞吐量。
但ACID交易功能又对业务运营非常重要,数据存储中,用户通常需要以常用的数据来产生报表,但其他应用程序或是用户,可能又同时需要读写相同的数据表格。
Apache Iceberg或是Delta Lake等项目便是要来解决这样的问题,通过在表格格式中加入交易语义以及规则,满足特定应用对ACID交易的需求。另外,表格格式的好处便是能方便地进行数据版本控制,提供用户历史数据快照,用户可以查询数据的历史记录,或是快速地将数据回退到特定历史版本,而且当数据发生错误时,调试也会更加容易。
由于大数据平台底层的存储系统将数据分为文件或是对象,这些文件能以特定结构或是协议表示成数据表格,当这些数据表格大于单一文件的限制时,便需要拆分成多个文件,而组织这些文件成为一个表格的方法就是表格格式。除了Google云计算平台自己提供的表格功能之外,用户现在也可以在Dataproc中使用开源项目Delta Lake以及Apache Iceberg。
Delta Lake是一个存储层,主要是要为Apache Spark提供类似关系型数据库管理系统的功能,像是ACID交易功能、时间旅行(Time Travel)、架构评估,同时也提供删除、更新以及插入数据等操作。Delta Lake将文件存储成Apache Parquet开放格式,并在存储系统维护一个文件存储表格的元数据,使用交易日志机制来控制来源的真实性与交易原子性。
而还在孵化器阶段的Apache Iceberg,则是一个专门用在大量分析数据集上的开源表格格式,用户可以在Presto和Spark中加入表格,以类似SQL表格的方式进行操作,另外,Iceberg提供隐藏分区功能,可通过定义分区字段以及实际分区之间的关系,抽象化表格的分区,因此当表格分区改变时,用户查询的方式也不需要改变。
另外,Dataproc 1.3也开始支持Apache Hudi,让用户以记录层级,进行数据插入、更新和删除,满足要对个别记录进行增量更新等使用场景,也能创建数据集和数据表,并管理底层的数据格式,Apache Hudi存储格式使用Apache Parquet和Apache Avro。