2

我有大量具有不同模式的 PostgreSQL 表以及其中的大量数据。

我现在无法进行数据分析,因为数据量非常大 - 几 TB 的数据,而 PostgreSQL 无法在合理的时间内处理查询。

我正在考虑以下方法 - 我将使用 Apache Spark 处理我的所有 PostgreSQL 表,加载 DataFrame 并将它们作为 Parquet 文件存储在 AWS S3 中。然后我将使用 RedShift Spectrum 来查询存储在这些 PARQUET 文件中的信息。

首先,我想问一下——这个解决方案会起作用吗?

第二个 - RedShift Spectrum 是否能够从这些 Parquet 文件自动创建 EXTERNAL 表而无需额外的架构规范(即使原始 PostgreSQL 表包含 AWS RedShift 不支持的数据类型)?

4

2 回答 2

1
  1. Redshift Spectrum 几乎支持与 Redshift 本身相同的数据类型。

  2. Redshift Spectrum 在幕后创建计算节点集群。集群的大小取决于实际 Redshift Cluster 节点的数量,因此如果您计划创建 1 个节点的 Redshift 集群,Spectrum 的运行速度会非常慢。

  3. 正如您在评论中指出的那样,您可以使用 Athena 来查询数据,在您的情况下,这将是更好的选择,而不是 Spectrum。但是 Athena 有几个限制,比如 30 分钟的运行时间、内存消耗等。因此,如果您打算使用多个连接进行复杂的查询,它就无法工作。

  4. 如果没有提供的结构,Redshift Spectrum 无法创建外部表。

  5. 在您的情况下,最佳解决方案是使用 Spark(在 EMR 或 Glue 上)转换数据,使用 Athena 进行查询,如果 Athena 无法执行特定查询 - 对相同数据使用 SparkSQL。您可以使用 Glue,但在 Spot 实例上的 EMR 上运行作业会更加灵活且成本更低。EMR 集群附带 EMRFS,它使您能够几乎透明地使用 S3 而不是 HDFS。

于 2018-11-06T09:31:08.063 回答
0

AWS Glue作为您的一个选项可能会很有趣。它既是 Spark 的托管版本,带有一些 AWS 特定的插件和数据爬虫 + 数据目录。

它可以爬取 Parquet 文件等非结构化数据并找出结构。然后,您可以在需要时以结构化形式将其导出到 AWS RedShift。

请参阅此博客文章,了解如何使用 JDBC 将其连接到 postgres 数据库以将数据从 Postgres 移动到 S3。

于 2018-11-05T15:53:26.810 回答