java - RDS 到 S3 - 数据转换 AWS

标签 java amazon-web-services apache-spark amazon-emr data-transfer

我的 RDS postgres/oracle(尚未确定是 oracle 还是 postgres)实例中有大约 30 个表。我想获取过去 4 小时内插入/更新的所有记录(可配置),创建与每个表相关的 csv 文件并将文件存储在 S3 中。我希望整个过程都是事务性的。如果从一张表获取数据时出现任何错误,我不希望与其他 29 个表相关的数据保留在 S3 中。数据不是很大,在4小时内,每个表的记录数不超过100条。

我正在考虑在 EMR 集群中使用 Spark 作业来从 RDS 获取数据,为每个表创建一个 csv 并在流程结束时将所有文件发布到 S3。一旦数据发布到 S3,EMR 集群就会被销毁。 cloudwatch 触发器将每 4 小时调用一次 lamda,这将启动一个新的 EMR 集群来执行此作业。

对于这种转变,是否有任何值得探索的替代方法?

最佳答案

看看AWS Glue它在幕后使用 EMR,但您不​​需要关心基础设施和配置,只需 setup crawlerwrite your ETL job .

请注意,AWS Glue 不支持 JDBC 连接的谓词下推 ( currently s3 only ),因此这意味着它将首先加载整个表,然后再应用过滤。

此外,您还应该仔细考虑原子性,因为 Glue ETL 作业只是处理数据并写入接收器,而无需事务。如果发生故障,它不会删除部分写入的记录,因此您应该自行管理。我会考虑几个选项:

  1. 每次执行时将数据写入临时文件夹(本地或 s3),然后使用 aws s3 sync 将对象移动到最终目的地使用 TransferManager from AWS SDK 命令或复制数据
  2. 将数据写入最终目的地的专用文件夹中,并在出现故障时使用 CLI 或 SDK 将其删除

关于java - RDS 到 S3 - 数据转换 AWS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50361589/

相关文章:

amazon-web-services - AWS超低延迟读/写数据存储: EFS vs Dynamodb DAX vs ElastiCache

apache-spark - 带有 Spark 2.1 结构化流的 Kafka - 无法反序列化

scala - 如何使用 Spark/Scala 中的频率计数从文本文件创建二元组?

linux - Linux 的 Oracle JDK 链接是否断开?

amazon-web-services - 如何在 Terraform 中创建角色

amazon-web-services - 如何更改从 AWS Step Function Map 并行运行的 Glue 作业的最大并发运行次数?

java - 如何访问每一行中的条目并应用自定义函数?

java - Android对每个应用程序使用SD卡的存储限制

java.util.扫描仪 : wait for input

java - 为什么输出是这样的? ( java )