Spark Streaming Redshift 性能问题

Posted

技术标签:

【中文标题】Spark Streaming Redshift 性能问题【英文标题】:Spark Streaming Redshift Performance Issues 【发布时间】:2017-11-05 19:04:42 【问题描述】:

我在 Redshift 表上运行的 Spark 流代码中有许多创建表、插入和更新。我正在使用 Spark 2.2、spark-redshift-preview-3.0.0 jar 和 scala 2.11.8。通过流式作业在 Redshift 中插入/更新 5000 行需要 20 多分钟 - 这超出了我的 spark 微批处理窗口并使我的系统不稳定。

我应该设置哪些配置参数来加快我从 Spark Streaming 作业中的 Redshift 查询?我必须每 5 分钟插入和更新至少 10K 行。

【问题讨论】:

【参考方案1】:

这么慢的原因是你的spark代码正在生成诸如

之类的命令
insert into table ...
update table ...
delete from table ...

对于少量数据(偶尔有几行数据)可以使用此方法,但对于大量数据,您必须始终:

    将数据写入 s3,最好分块成 1MB 到 1GB 的文件, 最好用 gzip 压缩。 运行 redshift copy 命令将该 s3 数据加载到 redshift “暂存区”。 运行 redshift sql 将暂存数据合并到目标表中。

使用这种方法可能比单独的插入/更新/删除效率高数百倍。

您可以每隔几分钟运行一次批量更新,以保持较低的红移数据延迟。

【讨论】:

谢谢!更新依赖于插入,所以如果我必须进行 S3 复制和运行 redshift sql,我该如何协调所有这些 - 所有这些都来自我的流块(即我的 forEachRDD 块)?

以上是关于Spark Streaming Redshift 性能问题的主要内容,如果未能解决你的问题,请参考以下文章

spark streaming kafka example

.Spark Streaming(上)--实时流计算Spark Streaming原理介

从 Redshift 读取到 Spark Dataframe(Spark-Redshift 模块)

Spark Streaming实时流处理项目实战Spark Streaming整合Kafka实战一

Spark Streaming实时流处理项目实战Spark Streaming整合Kafka实战一

Spark Streaming实时流处理项目实战Spark Streaming整合Kafka实战一