【问题标题】:Spark Streaming Redshift Performance IssuesSpark Streaming Redshift 性能问题
【发布时间】: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 行。

【问题讨论】:

    标签: spark-streaming amazon-redshift


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 谢谢!更新依赖于插入,所以如果我必须进行 S3 复制和运行 redshift sql,我该如何协调所有这些 - 所有这些都来自我的流块(即我的 forEachRDD 块)?
    猜你喜欢
    • 2022-09-22
    • 2017-08-13
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    相关资源
    最近更新 更多