维护流表

流查询可以快速创建新的表版本,这将创建大量的表元数据来跟踪这些版本。强烈建议通过调优提交速率、旧快照过期和自动清理元数据文件来维护元数据。

(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 ......
          

......

抱歉,只有登录会员才可浏览!会员登录


《Spark原理深入与编程实战》