开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

大佬们,join state过大的问题,怎么解决啊?我看到文档上可以通过设置table.exec.

大佬们,join state过大的问题,怎么解决啊?我看到文档上可以通过设置table.exec.state.ttl,或者使用窗口join,但是我们的场景下table.exec.state.ttl需要设置为100多天,没法搞。。。

展开
收起
游客3oewgrzrf6o5c 2022-08-15 17:32:54 548 0
1 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    当 Spark SQL 中的 join state 过大时,可能会导致 Spark 作业的性能下降甚至失败。Spark SQL 中的 join state 是指在执行 join 操作时,Spark 会将 join 结果保存在内存或磁盘中,以便后续使用。如果 join state 过大,可能会导致内存和磁盘资源的耗尽,进而导致 Spark 作业的失败。

    以下是一些解决 Spark SQL join state 过大的方法:

    增加 Spark Executor 内存。可以通过增加 Spark Executor 的内存来减少 join state 对内存的占用。您可以通过设置 spark.executor.memory 参数来增加 Executor 的内存大小。需要注意的是,增加内存可能会导致 Executor 数量的减少,进而影响到作业的并行度和性能。

    调整 Spark SQL 的 join 策略。Spark SQL 中有多种 join 策略,例如 Broadcast Join、Shuffle Hash Join、Shuffle Sort Merge Join 等。不同的 join 策略对 join state 的占用有所不同。您可以根据实际情况,选择适合的 join 策略来减少 join state 对内存和磁盘的占用。

    增加 Spark SQL 的 shuffle 分区数。Spark SQL 中的 shuffle 操作(如 Shuffle Sort Merge Join)会将数据进行重新分区,以便于后续的计算和存储。您可以通过增加 shuffle 分区数来减少每个分区的数据量,从而减少 join state 对内存和磁盘的占用。您可以通过设置 spark.sql.shuffle.partitions 参数来增加 shuffle 分区数。

    使用外部存储系统。如果您的 join state 过大,可能需要使用外部存储系统(如 Hadoop HDFS)来保存 join 结果。您可以通过设置 spark.sql.sources.useV1SourceList 参数来指定外部存储系统的使用方式。

    2023-06-23 11:17:17
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关电子书

更多
Spark SQL: Past, Present and Future 立即下载
Spark SQL:Past Present &Future 立即下载
从理论到实践,深度解析MySQL Group Replication 立即下载