安承悦读

内部调研优缺点总结(热门4篇)

admin
导读 可以修改底层 file_format,此处默认为 parquet,但是我想修改为 orc,两种方法:进行安装完毕,此处不再详述,conf 目录下需要有 ,这里就不多描述了2.在 下加入下面的语句理解了 Flink Sink 算子的设计后,下一个比较重要的问题就是:如何正确地设计两个算子的 stat

内部调研优缺点总结 第1篇

排序介绍

在 Iceberg 之前,Flink 是不支持 Iceberg 排序功能的,所以之前只能结合 Spark 以批模式来支持排序功能, 新增了排序特性的支持,也意味着,我们在实时也可以体会到这个好处。

排序的本质是为了扫描更快,因为按照 sort key 做了聚合之后,所有的数据都按照从小到大排列,max-min 可以过滤掉大量的无效数据。

排序 demo

内部调研优缺点总结 第2篇

参数解释

通过分区、列的上下限信息来确定是否读取 file_path 的文件,数据排序后,文件列的信息也会记录在元数据中,查询计划从 manifest 去定位文件,不需要把信息记录在 Hive metadata,从而减轻 Hive metadata 压力,提升查询效率。

利用 Iceberg 的排序特性,将天作为分区。按天、小时、分钟进行排序,那么 manifest 文件就会记录这个排序规则,从而在检索数据的时候,提高查询效率,既能实现 Hive 分区的检索优点,还能避免 Hive metadata 元数据过多带来的压力。

目前 Apache Iceberg 版本上实现 Flink 流批入湖功能,同时还支持 Flink 批作业查询 Iceberg 数据湖的数据。

我们知道,Flink iceberg sink 的设计原理是由 Iceberg 采用乐观锁的方式来实现 Transaction 的提交,也就是说两个人同时提交更改事务到 Iceberg 时,后开始的一方会不断重试,等先开始的一方顺利提交之后再重新读取 metadata 信息提交 transaction。考虑到这一点,采用多个并发算子去提交 transaction 是不合适的,容易造成大量事务冲突,导致重试。

所以,把 Flink 写入流程拆成了两个算子,一个叫做 IcebergStreamWriter,主要用来写入记录到对应的 avro、parquet、orc 文件,生成一个对应的 Iceberg DataFile,并发送给下游算子;另外一个叫做 IcebergFilesCommitter,主要用来在 checkpoint 到来时把所有的 DataFile 文件收集起来,并提交 Transaction 到 Apache iceberg,完成本次 checkpoint 的数据写入。

理解了 Flink Sink 算子的设计后,下一个比较重要的问题就是:如何正确地设计两个算子的 state ?

首先,IcebergStreamWriter 的设计比较简单,主要任务是把记录转换成 DataFile,并没有复杂的 State 需要设计。IcebergFilesCommitter 相对复杂一点,它为每个 checkpointId 维护了一个 DataFile 文件列表,即 map>,这样即使中间有某个 checkpoint 的 transaction 提交失败了,它的 DataFile 文件仍然维护在 State 中,依然可以通过后续的 checkpoint 来提交数据到 Iceberg 表中。

内部调研优缺点总结 第3篇

Iceberg 以前,通过定时触发 batch api 进行小文件合并,这样虽然能合并,但是需要维护一套 Actions 代码,而且也不是实时合并的。

Table table = findTable(options, conf); (table).rewriteDataFiles() .targetSizeInBytes(10 * 1024) // 10KB .execute();

Iceberg 新特性,支持了流式小文件合并。

通过分区/存储桶键使用哈希混洗方式写数据、从源头直接合并文件,这样的好处在于,一个 task 会处理某个分区的数据,提交自己的 Datafile 文件,比如一个 task 只处理对应分区的数据。这样避免了多个 task 处理提交很多小文件的问题,且不需要额外的维护代码,只需在建表的时候指定属性 ,该参数与其它引擎是通用的,比如 Spark 等。

内部调研优缺点总结 第4篇

在 = = = thrift://node182:9083

下面的例子都是按模式二:元数据共用 进行。

进行安装完毕,此处不再详述,conf 目录下需要有 ,这里就不多描述了2.在 下加入下面的语句

其中 是参照 中配置 ,其中的 iceberg 为 namespace 的意思命名空间,下面我们创建 database 都要在此命名空间之下。

启动 Spark

1)启动 Spark 的 thriftserver 服务

2)用 beeline 进行连接

此处连接的端口号从 中配置读取

创建 iceberg 源表

1)创建 database

想看当前 namespace 用下面命令

2)创建 iceberg 源的表

可以修改底层 file_format,此处默认为 parquet,但是我想修改为 orc,两种方法:

方法一:

方法二:

3)插入数据,并看 hdfs 上表的元数据

元数据所在 hdfs 目录可以从 的配置中得到:

看到 hdfs 上数据与元数据

IceBerg目前在高速迭代中,越来越多大公司加入到了 Iceberg 的贡献中,包括 Netflix、Apple、Adobe、Expedia 等国外大厂,也包括腾讯、阿里、网易等国内公司。一个好的技术架构最终会得到更多人的认可。随着国内推广的增多,以及国内开发者在这个项目上的投入、运营,未来在国内 Iceberg 前景可期。