我在 AWS Oracle RDS 实例的一个表(约 70 亿行)中有大量数据。最终结果是我希望该表作为管道分隔值存储在 S3 中,以便我可以将其读入 EMR。这基本上是一次性的事情,所以我需要它准确地工作,而不必因为超时而重新运行整个上传;我真的不在乎它是如何工作的,或者设置起来有多么困难/烦人。我在 Oracle 机器上具有 root 访问权限。我查看了 Data Pipelines,但似乎它们只支持 MySQL,我必须让它与 Oracle 一起使用。此外,我没有足够的硬盘空间将整个表转储到 Oracle 实例上的 CSV,然后上传。我怎样才能完成这项工作?
问问题
1751 次
2 回答
1
您可以使用 Sqoop ( http://sqoop.apache.org/ ) 来执行此操作。您可以编写一个 sqoop 脚本,该脚本可以安排为 Data Pipeline 下的“EMR 活动”。
Sqoop 使用 Hadoop,可以打开多个到 Oracle 的连接并加载。
您可以将原始数据保存在 S3 上,并直接从 EMR 上读取。或者,您可以选择使用“S3Distcp”活动将其复制到 EMR(如果需要,再次安排在 Data Pipeline 上)。
如果您没有调度需求,您可以使用 EMR 控制台启动 EMR 集群 - 并在其上运行 Sqoop。
于 2015-03-04T00:21:54.253 回答
0
你可以使用 Python/boto 在较小的规模上做同样的事情。使用单线程复制 70 亿条记录“仅”需要 8 天。您可以创建 100 个线程队列并并行处理 Oracle 表分区。它可能不是生产解决方案,但它适用于我的临时工作。
于 2016-04-06T04:05:59.757 回答