在 Spark 与 Redshift 上执行查询

Dip*_*kar 2 data-warehouse amazon-redshift apache-spark

我们的数据仓库位于 Redshift(50TB 大小)中。有时,业务用户会运行大型查询(太多联接、内联查询 - 由 Tableau 等 BI 工具生成)。大查询会降低数据库性能。

  1. 在 Redshift 之上使用 Spark 来卸载 Redshift 之外的一些计算是否明智?

  2. 或者通过添加更多节点来提高 Redshift 计算能力会更容易且更具成本效益吗?

  3. 如果我在 Spark 中执行select a.col1, b.col2 from table1 a, table2 b where a.key = b.key。表通过 JDBC 连接并驻留在 Redshift 上,实际处理在哪里发生(在 Spark 或 Redshift 中)?

Joh*_*ein 5

对 Amazon Redshift 中存储的数据的任何查询均由 Amazon Redshift 节点执行。虽然 Spark 可以进行外部 JDBC 调用,但 SQL 将由 Redshift 执行。

有许多技术可以优化 Redshift 查询执行:

首先查看消耗过多资源的查询,并确定是否可以通过更改每个表使用的排序键、分布键和压缩编码来优化它们。正确使用这些参数可以极大地提高Redshift性能。

然后,如果许多用户同时运行查询,请检查是否值得改进工作负载管理设置以创建具有不同内存设置的单独队列。

最后,如果性能仍然是问题,请添加额外的 Redshift 节点。密集计算节点将提供更好的性能,因为它们使用 SSD 存储,但每 TB 存储的成本更高。