1、胡争 Apache Iceberg&HBase PMCApache Apache FlinkFlink 集成集成 Apache Iceberg Apache Iceberg 最佳实践最佳实践HiveHive表面临的挑战表面临的挑战IcebergIceberg的解决方案的解决方案FlinkFlink和和IcebergIceberg最佳实践最佳实践现状及规划现状及规划#1#2#3#4#1#1Hive Hive 表格式面临的挑战表格式面临的挑战挑战#1:上云Hadoop HDFS Hive Table FormatHive MetastoreParquetAvroORCGeneric Table F
2、ormatCatalogParquetAvroORCAliyun OSSAmazon S3Google GCSHMS 信息冗杂(Schema/表级统计信息/分区信息等),边界不清。无法扩展到云厂商 Catalog 服务。HMS 存储中心化,扩展性差。HDFS 成本高,缺乏弹性。Hive 表格式抽象不清晰,暴露太多差异化细节给上层。Hadoop HDFS 挑战#1:上云Hive MetastoreCentralized metastore databasepart-000.parquetpart-031.parquetBlock Meta DataWrite Path 依赖 HDFS 的多个文件
3、 RENAME 原子性语义Read Path 先查 MySQL 获取分区列表,再 LIST 目录获取文件Block Meta Data中心化的 Metastore 数据库,扩展性差表级统计信息更新不及时,缺乏有效的文件统计信息挑战#1:上云支持多种对象存储特点:弹性、低廉、稳定要求要求一一统一的Table语义抽象度高,ACID,多种文件格式要求要求二二计算引擎互连互通支持Hive,Spark,Flink,Presto读写要求要求三三挑战#2:近实时数仓Hive TableGeneric Table小时级时效性体验分钟时级时效性体验Hadoop HDFS Hive MetastoreCentra
4、lized metastore databasepart-000.parquetpart-031.parquetBlock Meta DataBlock Meta Data挑战#2:近实时数仓入仓:HMS受限于扩展性,难以做按分钟做分区查询:先查MYSQL找分区,再list分区目录找文件,元数据index效率低查询:缺乏文件级全局统计信息出仓:不支持增量数据查询挑战#2:近实时数仓分钟级入湖入仓湖仓内数据更实时要求要求一一更高效索引加速数据分析查询响应更快要求要求二二增量出湖出仓下游ETL响应更快要求要求三三挑战#3:变更IDName1001Alex1002BobIDName1001Alex1
5、002BobAddressBJSH问题一:Schema 变更(如新增一个字段)挑战#3:变更问题二:分区变更(从月级分区改成天级分区)2021/012021/021.avro2.avro3.avro4.avro5.avro6.avroPartition by month(ts)2021/01/012021/02/011.avro2.avro3.avro4.avro5.avro6.avroPartition by day(ts)挑战#3:变更问题三:CDC 数据变更挑战#3:变更Schema 变更表结构随业务变动而变更要求一要求一分区变更调整分区策略适配不同分析诉求要求要求二二数据变更表级/分区
6、级/文件级/行级不同粒度变更要求要求三三#2 2Iceberg Iceberg 的解决方案的解决方案Iceberg 数据湖系统架构阿里云EMRMaxComputeHologresDLF CatalogData Lake ManagerJindoFs CacheAliyun OSSDatabaseImport DataETLAuthoritySecurityLake SaaSCompactionData SortExpire DataSnapshotsMetadataMetrics挑战#1:上云Manifest FileManifest FileDataDataDatabaseDatabaseT
7、ableTablePartition SpecPartition SpecMetadataMetadataSnapshotSnapshotTable MetadataTable MetadataCurrent Table Version PointerCurrent Table Version Pointer数据访问不使用任何LIST接口可扩展的 metadata 存储挑战#1:上云ACID不依赖 RENAME 接口v1.jsonsnapshot.1manifest.11.avro2.avro3.avromanifest.2snapshot.2External Table Lock Servi
8、ces4.avromanifest.3snapshot.34.avro1.Grab Lockv2.json2.Commit Txn3.Release LockIceberg SchemaParquet SchemaAvro SchemaORC SchemaTable APISpark SQLFlink SQLHive SQL挑战#1:上云统一的 Table 语义挑战#1:上云完善的计算和多云生态对接CatalogApache Iceberg Table FormatDistribution File SystemParquetAVROORCOSSS3HDFS挑战#2:近实时数仓去中心化可拓展的
9、 metadata挑战#2:近实时数仓丰富的 metadata index 加速挑战#2:近实时数仓增量的出入湖挑战#3:变更快速实现 Schema 变更挑战#3:变更轻量级分区变更挑战#3:变更V2支持 Merge-On-Read 方式更新数据#3 3FlinkFlink 和和 Iceberg Iceberg 最佳实践最佳实践Flink写入filesystem表,还是Iceberg表?#1Flink写入 FileSystem 表之后,不能被其他计算引擎直接读取?#2Flink写入到 FileSystem 的表,怎么实现 schema 变更、分区变更,数据变更?#3Flink写入到 FileS
10、ystem 的表,怎么存放在 OSS 以及更多云存储之上?#4Flink写入到 FileSystem 的表,如何追溯历史版本?#5Flink写入到 FileSystem 的表,如何实现增量拉取?Flink写入filesystem表,还是Iceberg表?#1Flink写入 FileSystem 表之后,不能被其他计算引擎直接读取?#2Flink写入到 FileSystem 的表,怎么实现 schema 变更、分区变更,数据变更?#3Flink写入到 FileSystem 的表,怎么存放在 OSS 以及更多云存储之上?#4Flink写入到 FileSystem 的表,如何追溯历史版本?#5Fli
11、nk写入到 FileSystem 的表,如何实现增量拉取?写Iceberg表,遵循Iceberg标准协议。Hive,Presto,Spark,Flink可正常读写。Iceberg在ACID之上支持各种DDL变更和DML变更。Iceberg基于对象存储fs语义构建,社区支持HDFS/S3/aliyun-oss等异构存储服务。Iceberg表自动维护历史版本,轻松实现历史追溯。Iceberg表相邻两Snapshot之差及增量,纯粹借助元数据实现增量数据拉取。Apache Iceberg 0.13.0 Quick StartMySQL数据如何实时同步到OSS?MySQL全量和增量如何完美对齐?Bin
12、log不丢不重地入湖?代码开发?门槛太高?没有合适的列存存储维护变更?MySQL数据如何实时同步到OSS?MySQL数据如何实时同步到OSS?Flink-CDCMySQL数据如何实时同步到OSS?MySQL数据如何实时同步到OSS?第一步:定义Source第二步:定义Sink第三步:导入数据MySQL数据如何实时同步到OSS?#4 4现状及进展现状及进展Apache Iceberg 功能Flink 集成 Iceberg 现状及规划Apache FlinkApache IcebergPhase#1(Connect to iceberg)Apache Flink 1.11.0Apache Iceb
13、erg 0.10.0(Oct 2020)Flink streaming sinkFlink batch sinkFlink batch sourcePhase#2(Replace hive table format)Apache Flink 1.11.0Apache Iceberg 0.11.0(Jan 2021)Flink source improvement-filter/limit push downFlink streaming sourceFormat v2:CDC/Upsert(Phase#1)-write&read correctness data.Major Compactio
14、n(Batch Mode).Phase#3(Batch/Stream row-level delete)Apache Flink 1.12.0Apache Iceberg 0.12.0(Apr 2021)Format v2:CDC/Upsert(Phase#2)-stabilityFlink SQL imports CDC to iceberg.Apache Flink 1.13.2Apache Flink 1.14.0Apache iceberg 0.13.0(?)Support flink 1.13Support flink 1.14Format v2:CDC/UpsertPhase#4More flink versionsApache iceberg 0.14.0(?)Flip-27 reader/writerFormat v2:CDC/Upsert Improvements.Delete Files compaction.