【问题标题】:Apache Flink: AWS S3 timeout exception when starting a job from a savepointApache Flink:从保存点启动作业时出现 AWS S3 超时异常
【发布时间】:2022-05-05 00:57:23
【问题描述】:

我有一个 Flink 作业,它在 Map 运算符中具有很大的状态。我们正在将具有大约 80GB 存储空间的保存点存储到 AWS S3。这个算子我们有大约 100 个并行度。但是,当我们从保存点恢复时,总会出现类似

的异常

原因:java.io.InterruptedIOException: 无法在 s3a:/ 0 处打开 s3a://xxxx/UbfK/flink/savepoints/logjoin/savepoint-a9600e-39fd2cc07076/f9a31490-461a-42f3-88be-ec169145c35f:/ /adshonor-data-cube-test-apse1/UbfK/flink/savepoints/logjoin/savepoint-a9600e-39fd2cc07076/f9a31490-461a-42f3-88be-ec169145c35f:org.apache.flink.fs.s3base.shaded.com.amazonaws .SdkClientException:无法执行 HTTP 请求:等待池连接超时。

是否有配置参数来增加 Flink 中 AWS S3 的超时设置或其他方式来避免此错误?

【问题讨论】:

  • 我们已经尝试修改 fs.s3a.connection.maximum 但它不起作用。超时错误仍然发生。我们最终通过减少每个taskmanager的slot号来临时解决这个问题。以前我们有一些大型任务管理器,它们有 30-40 个插槽。通过降级机器大小,将槽数减少到 8 个,增加任务管理器的数量,我们最终消除了超时错误。

标签: apache-flink flink-streaming


【解决方案1】:

尝试将fs.s3a.connection.maximum 设置为 50 或 100 之类的值

【讨论】:

    【解决方案2】:

    详细说明史蒂夫所说的......问题可能是正在使用的 HTTP 客户端没有足够大的“连接池”。

    每个与单个存储桶交互的 S3A 客户端,作为单个用户, 有自己的专用开放 HTTP 1.1 连接池,旁边有一个 用于上传和复制操作的线程池。默认池 尺寸旨在平衡性能和 内存/线程使用。

    要全面了解您可以调整的内容(包括fs.s3a.connection.max,请参阅this Hadoop page 的“调整选项”部分。

    【讨论】:

      【解决方案3】:

      由于 Flink 使用 AWS 连接代码,bump 的设置为fs.s3.maxConnections,与纯 Hadoop 配置不同。

      在AWS EMR上运行时,可以参考这个文档:https://aws.amazon.com/cn/premiumsupport/knowledge-center/emr-timeout-connection-wait/

      【讨论】:

        【解决方案4】:

        对于发现此问题的任何人 - 根据Flink documentation

        例如,Hadoop 有一个 fs.s3a.connection.maximum 配置键。如果你想改变它,你需要把 s3.connection.maximum: xyz 放到 flink-conf.yaml 中。 Flink 会在内部将其转换回 fs.s3a.connection.maximum。

        所以要设置最大连接的值,您实际上想在 Flink 配置中输入 s3.connection.maximum: xyz(或 s3a.connection.maximum: xyz 对我有用)以更改此值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-13
          • 1970-01-01
          • 2011-10-14
          • 2016-01-11
          • 2020-10-15
          • 1970-01-01
          相关资源
          最近更新 更多