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(上)--实时流计算Spark Streaming原理介
从 Redshift 读取到 Spark Dataframe(Spark-Redshift 模块)
Spark Streaming实时流处理项目实战Spark Streaming整合Kafka实战一