【问题标题】:How to solve AWS Glue pyspark script throwing retryWrite error from DocumentDB如何解决 AWS Glue pyspark 脚本从 DocumentDB 抛出重试写入错误
【发布时间】:2022-12-12 07:32:16
【问题描述】:

在 AWS glue 中运行以下代码。作业能够从数据库中读取数据,但在写入时失败。

调用 o102.pyWriteDynamicFrame 时出错。命令失败,错误 301:服务器上的“不支持可重试写入”:。完整的响应是 {"ok": 0.0, "code": 301, "errmsg": "Retryable writes are not supported", "operationTime": {"$timestamp": {"t": 1647921685, "i": 1}}}

在 Job Details 部分使用目录 DocumentDB 连接

尝试在连接字符串中使用 retryWrite=false 但仍然出现错误


documentdb_uri = "mongodb://<host name>:27017"
documentdb_write_uri = "mongodb://<host name>:27017"

read_docdb_options = {
    "uri": documentdb_uri,
    "database": "test",
    "collection": "profiles",
    "username": "<username>",
    "password": "<password>",
    "ssl": "true",
    "ssl.domain_match": "false"
}

write_documentdb_options = {
    "uri": documentdb_write_uri,
    "database": "test",
    "collection": "collection1",
    "username": "<username>",
    "password": "<password>",
    "ssl": "true",
    "ssl.domain_match": "false"
}

# Get DynamicFrame from DocumentDB
dynamic_frame2 = glueContext.create_dynamic_frame.from_options(connection_type="documentdb",
                                                               connection_options=read_docdb_options)

# Write DynamicFrame to DocumentDB
glueContext.write_dynamic_frame.from_options(dynamic_frame2, connection_type="documentdb",
                                             connection_options=write_documentdb_options)

job.commit()

【问题讨论】:

    标签: amazon-web-services aws-glue aws-documentdb


    【解决方案1】:

    正确的选项是 retryWrites=false 并且需要位于 uri 的末尾。

    在你的情况下:documentdb_write_uri = "mongodb://&lt;host name&gt;:27017/?retryWrites=false"

    【讨论】:

    • 在 URI 末尾使用 retryWrites 时出现错误 -> 调用 o86.pyWriteDynamicFrame 时发生错误。等待连接时 30000 毫秒后超时。集群状态的客户端视图是 {type=UNKNOWN, servers=[{address=<clusterName>:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadTimeoutException: Timeout while receiving message}, 由 {java 引起.net.SocketTimeoutException:读取超时}}]
    【解决方案2】:

    通过将 Glue 版本从 3.0 降级到 2.0 解决了这个问题。 在 3.0 中,使用动态框架时无法设置 retryWrite 设置。

    已在他们的董事会中创建了一张票,但尚未解决。 AWS 板中的问题供参考 - https://github.com/awslabs/aws-glue-libs/issues/111 [调用 o365.pyWriteDynamicFrame 时发生错误。命令失败,出现错误 301:服务器 **** 上“不支持可重试写入”。*****.docdb.amazonaws.com:27017。]

    【讨论】:

    • 从 Github 问题中添加引述或小示例,如果链接不可用,您的答案仍然有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 2018-08-31
    • 2020-02-04
    • 2021-10-15
    • 1970-01-01
    相关资源
    最近更新 更多