多阶段查询引擎的持久化存储
您可以使用持久化存储来改进从深层存储(deep storage)进行的查询以及基于 SQL 的数据摄入。
S3、Google Storage 和 Azure Blob Storage 可作为持久化存储位置。
用于深层存储查询的持久化存储提供了一个位置,您可以将深层存储查询的结果写入其中。基于 SQL 的数据摄入的持久化存储用于临时存放中间文件,这可以提高可靠性。
启用持久化存储还可以使用本地磁盘来存储临时文件,例如在数据排序过程中产生的中间文件。任务将根据配置任务存储大小中所述,使用为其临时使用场景所配置的任何设置。如果配置的限制太低,Druid 可能会抛出 NotEnoughTemporaryStorageFault 错误。
启用持久化存储
要启用持久化存储,您需要设置以下通用服务属性。
对于 S3
druid.msq.intermediate.storage.enable=true
druid.msq.intermediate.storage.type=s3
# Remote storage location
druid.msq.intermediate.storage.bucket=YOUR_BUCKET
druid.msq.intermediate.storage.prefix=YOUR_PREFIX
# Local temporary directory (on each Druid server)
druid.msq.intermediate.storage.tempDir=/path/to/your/temp/dir
对于 Google Storage
druid.msq.intermediate.storage.enable=true
druid.msq.intermediate.storage.type=google
# Remote storage location
druid.msq.intermediate.storage.bucket=YOUR_BUCKET
druid.msq.intermediate.storage.prefix=YOUR_PREFIX
# Local temporary directory (on each Druid server)
druid.msq.intermediate.storage.tempDir=/path/to/your/temp/dir
对于 Azure Blob Storage
druid.msq.intermediate.storage.enable=true
druid.msq.intermediate.storage.type=azure
# Remote storage location
druid.msq.intermediate.storage.container=YOUR_CONTAINER
druid.msq.intermediate.storage.prefix=YOUR_PREFIX
# Local temporary directory (on each Druid server)
druid.msq.intermediate.storage.tempDir=/path/to/your/temp/dir
有关这些设置以及与持久化存储相关的其他设置的详细信息,请参阅持久化存储配置。
将持久化存储用于基于 SQL 的数据摄入查询
运行查询时,请包含上下文参数 durableShuffleStorage 并将其设置为 true。
对于希望为 worker 使用容错功能的查询,请将 faultTolerance 设置为 true,这将自动把 durableShuffleStorage 设置为 true。
将持久化存储用于从深层存储进行的查询
根据您预期的结果大小,可能需要将深层存储查询的最终结果保存到持久化存储中。
默认情况下,Druid 将深层存储查询的最终结果保存到任务报告中。通常,这对于较小的结果集是可以接受的,但对于较大的结果集可能会导致超时。
运行查询时,请包含上下文参数 selectDestination 并将其设置为 durableStorage。
"context":{
...
"selectDestination": "durableStorage"
}
您还可以将中间结果写入持久化存储 (durableShuffleStorage) 以获得更好的可靠性。worker 写入中间结果的位置与存储最终结果的位置不同。这意味着即使您没有将中间结果写入持久化存储,也可以为结果启用持久化存储。
如果您将深层存储查询的结果写入持久化存储,则当任务从元数据存储中删除时,这些结果也会被清理。
持久化存储清理
为了防止持久化存储在任务无法清理临时文件的情况下被填满,可以调度一个周期性清理程序来清理那些没有对应控制器任务运行的目录。它利用存储连接器来操作持久化存储。持久化存储位置应仅用于存储集群 MSQ 任务的输出。如果该位置包含其他文件或目录,它们也将被清理。
使用 druid.msq.intermediate.storage.cleaner.enabled 和 druid.msq.intermediate.storage.cleaner.delaySeconds 来配置清理程序。有关更多信息,请参阅持久化存储配置。
请注意,如果您选择将查询结果写入持久化存储,则当任务从元数据存储中删除时,这些结果也会被清理。