iceberg - checklist 清单

iceberg调研checklist清单
序号功能点问题现象解决方案结论是否解决
1iceberg在Hive、Spark、Flink 中ddl 基本操作表1.SQL的方式分在hive建表在spark,flink中查看、操作不了;
2.SQL的方式分spark或者flink建 表在hive中查看、操作不了;
1.hive建表中要添加 ROW FORMAT SERDE
  'org.apache.iceberg.mr.hive.HiveIcebergSerDe'
STORED BY
  'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler' ;
同时 在TBLPROPERTIES  中配置 'engine.hive.enabled' = 'true';
1.各引擎中dll 操作表略有不同,
支持hive操作的要注意配置指定项;
2.spark 中ddl 操作丰富一些,支持力度高
 是
2catalog 引用1.进入库中,iceberg表与hive 表同时查看不了1.注册hive的catalog ,同时也注册iceberg表的catalog,
切换到hive的catalog 使用show tables 可以同时看到hive表
和iceberg 表
1.catalog 类型不同,使用的表的时候最好要写全名称
即 catalog.database.table
3隐藏分区1.spark建表隐藏分区表,hive 与flink 看不了1.隐藏分区只能在spark中建立,hive,flink不支持,使用的时候icerberg 表自动权限条件进行筛选1.隐藏分区一般用在时间上,使用相对应的时间转换函数
进行转换
4Metadata/metadata.json 文件过多1.每次checkpoint 都会会产一个新的文件,导致metadata.json过多1.配置 'write.distribution-mode'='hash',
'write.metadata.delete-after-commit.enabled'='true',
'write.metadata.previous-versions-max'='5', 保持最近5个,加上正在使用的,一共能看到6个,这个数字可配置
1.0.11版本后可以实现自动合并
5Metadata/snap.avro  快照过期1.每次checkpoint 都会会产一个新的快照,根据官方文档发现只能
手动执行Spark 或者Flink 的java API 才能设置过期,想看看能不能t和metadata.json 一样,通过配置实现自动清理
1.暂时没有发现自动设置过期快照,目前只能通过 java API的方式
实现,指定时间戳
自动设置过期功能期待中
6data 小文件过多合并清理删除1.每次checkpoint 都会会产一个新的文件,导致数据小文件过多,
通过java API可以实现合并,定期删除孤文件,根据业务时间进行的分区,发现有操作分区,删除不掉孤文件;
2.如果快照时间过期设置比较靠近当时快照,在执行合并和删除孤文件,有可能会导致 程序报错,流写入程序也报错的情况
1.发生此现象是由于 合并文件中间的时间差过短,短时间内执行合并操作,发现并无变化,隔长时间段再次合并,如果发现合并后产生的新的文件,那么就可以清理掉
2.如果不指定时间,默认会删除3天前的孤文件,如果指定了时间,离快照比较近,因为是流式入湖的流式数据,和压缩合并程序在同时操作一个表,如果该程序在删除无用文件的同时,其他两个程序很有可能正在读取或者写入,这样会导致删除了一些元数据文件,两程序会报错
设定快照过期的时间之前的文件 才能形成孤文件,才能被删除
7v1 v2 表流读流写1.v1表支持流读流写,v2支持流写,不支持流读
2.v1数据是 append 的不是 change log stream , 导致过多的无用数据
3.v2 是支持 upsert ,操作,却不支持下游流读,形成不了pipeline
1.目前尝试spark merge into 方案,在验证中spark merge into 最终生成的是overwrite 操作,overwrite 不能流读,所以结论就是 流表 只做append , change log stream 只能做结果表
8表中时间的读取1.flink建表字段,timestamp 在spark 中查无法查看1.flink timestamp 分有时区与无时区的概念,spark查看,
需要配置 set `spark.sql.iceberg.handle-timestamp-without-timezone`=true; 
flink与spark时间字段略有不同,细节问题
9flink读流表1.直接读取发现是批读1.flink 默认是批读,流读要指定参数
SET execution.type = streaming ;
SET table.dynamic-table-options.enabled=true;
select * from sample_stream_test01 /*+ OPTIONS('streaming'='true', 'monitor-interval'='1s')*/  ;
注意官方API
10flink流kafka表写入到iceberg表1.正常提交任务,任务也很正常,有数据byte流动,,iceberg表中却无数据1.设置checkpoint点,才能正常写入iceberg 必须得设置checkpoint
11spark 代码 流读表1.sparkspark.readStream.format("kafka"),
df.writeStream.format("console")
 .trigger(Trigger.ProcessingTime("2 seconds"))
打印不出来数据
1.一定要设置.option("checkpointLocation", "~/tmp/ll") 路径,
路径根据实际情况是否写本地,或者 hdfs
1.如果发现也都设置了还是没有执行不了,
可手动 删除 指定路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值