【问题标题】:Move data from PostgreSQL to AWS S3 and analyze with RedShift Spectrum将数据从 PostgreSQL 移动到 AWS S3 并使用 RedShift Spectrum 进行分析
【发布时间】:2019-04-09 00:02:33
【问题描述】:

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

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

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

首先,我想问一下 - 这个解决方案是否有效?

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

【问题讨论】:

    标签: postgresql amazon-web-services apache-spark amazon-redshift amazon-redshift-spectrum


    【解决方案1】:

    AWS Glue 可能对您来说很有趣。它既是 Spark 的托管版本,带有一些 AWS 特定的插件和 Data Crawler + Data Catalogue。

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

    请参阅this blog post,了解如何使用 JDBC 将其连接到 postgres 数据库以将数据从 Postgres 移动到 S3。

    【讨论】:

    • 感谢您的回答,看起来 Data Crawler + Data Catalog 应该可以完成这项工作。另外,我可以使用 AWS Athena 来代替 RedShift
    【解决方案2】:
    1. Redshift Spectrum 几乎支持与 Redshift 本身相同的数据类型。

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

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

    4. Redshift Spectrum 无法在没有提供结构的情况下创建外部表。

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

    【讨论】:

    • 感谢您的回答。目前最大的问题是数据库包含数千个具有不同模式的不同表,并且几乎不可能为每个表编写 ETL 脚本。因此,想法是将所有这些表保存到 Apache Parquet 文件中(通过 EMR 上的 Spark),然后通过 Data Crawler 自动发现和内置 Parquet 分类器在 Glue 数据目录中自动创建外部表。然后,我希望能够将 AWS RedShift Spectrum 或 AWS Athena 与 Glue 数据目录中定义的表一起使用。你怎么看,它会以这种方式工作吗?
    • 或者,正如您所提到的,代替 RedShift Spectrum 或 Athena,使用 AWS Glue 数据目录作为 Spark SQL 的元存储,并通过 JDBC 将 Looker 或 Tableau BI 工具连接到 EMR Spark Thrift Server?
    • Redshift Spectrum 将是一个糟糕的选择。我也不知道您提到的与 Spark Thrift 或 Glue 的 BI 工具的连接性。但是 Glue Data Catalog + Crawler + Athena(也许还有 EMR)很可能对你有用。但是如果你的 PostgreSQL 中有一些非原子类型,请检查 Presto(Athena 几乎只是它的一个包装器)是否支持它们。
    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2021-01-12
    • 2017-07-13
    • 1970-01-01
    相关资源
    最近更新 更多