维护流表
流查询可以快速创建新的表版本,这将创建大量的表元数据来跟踪这些版本。强烈建议通过调优提交速率、旧快照过期和自动清理元数据文件来维护元数据。
(1) 调优提交速率。
高提交率会产生大量的数据文件、清单和快照,这会导致表难以维护。鼓励至少1分钟的触发间隔,并在需要时增加间隔。代码如下:
import org.apache.spark.sql.streaming.Trigger // 默认触发器 (尽可能快地运行微批处理) df.writeStream .format("console") .start() // ProcessingTime trigger,使用处理时间,指定两秒钟的微批间隔 df.writeStream .format("console") .trigger(Trigger.ProcessingTime("2 seconds")) .start() // 一次性触发器 df.writeStream .format("console") .trigger(Trigger.Once()) .start()
(2) 过期旧快照。
每个写入表的微批都会生成一个新的快照,在表元数据中跟踪该快照直到过期,从而删除不再需要的元数据和任何数据文件。快照随着频繁提交而迅速累积,因此强烈建议定期维护由流查询写的表。
维护操作需要Table实例,使用Java API。例如,将把时间超过1天的快照设为过期,代码如下:
Table table = ... long tsToExpire = System.currentTimeMillis() - (1000*60*60*24); // 1天 table.expi ............
抱歉,只有登录会员才可浏览!会员登录