为什么 Parquet 而不是像 Postgres 这样的 RDBMS
Why Parquet over some RDBMS like Postgres
我正在为我的公司构建数据架构。一个包含内部和外部数据的简单 ETL,旨在构建静态仪表板和其他搜索趋势。
我试着一个一个地思考 ETL 过程的每一步,现在我在质疑 Load 部分。
我计划使用 Spark(开发上的 LocalExcecutor 和 Azure 上的服务用于生产)所以我开始考虑将 Parquet 用于 Blob 服务。我知道 Parquet 相对于 CSV 或其他存储格式的所有优势,我真的很喜欢这项技术。我阅读的大多数关于 Spark 的文章都以 df.write.parquet(...)
.
结尾
但我不明白为什么我可以只启动一个 Postgres 并将所有内容保存在这里。我知道我们不会每天产生 100Go 的数据,但我想在一家快速发展的公司中构建一些面向未来的东西,这将通过业务以及我们开始记录越来越多的日志和指标来产生指数级数据。
任何 pros/cons 更有经验的开发人员?
编辑:这条推文也让我质疑:https://twitter.com/markmadsen/status/1044360179213651968
主要的权衡是成本和交易语义之一。
使用 DBMS 意味着您可以事务性地加载数据。您还需要支付两者的费用 storage and compute on an on-going basis. The storage costs for the same amount of data are going to be more expensive in a managed DBMS vs a blob store。
在 DBMS 上扩展处理也更难(看起来 Azure 提供的最大 Postgres 服务器有 64 个 vcpus)。通过将数据存储到 RDBM 中,与使用 Spark + blob 存储相比,您可能会 运行 更快地克服 IO 或计算瓶颈。但是,对于许多数据集,这可能不是问题,正如推文所指出的那样,如果您可以使用 SQL 在数据库中完成所有操作,那么它的架构就简单得多。
如果您将 Parquet 文件存储在 blob 存储上,则在不重新生成大部分数据的情况下更新现有数据是很困难的(而且我不知道 Azure 的详细信息,但通常不能以事务方式完成)。计算成本与存储成本是分开的。
使用原始文件格式在 Hadoop 中存储数据效率极低。 Parquet 是一种行列文件格式,非常适合快速查询大量数据。正如您上面所说,将数据从 Spark 写入 Parquet 非常简单。还使用分布式处理引擎(Spark)将数据写入分布式文件系统(Parquet+HDFS),使整个流程无缝衔接。这种架构非常适合 OLAP 类型的数据。
另一方面,Postgres 是一个关系数据库。虽然它适用于存储和分析事务数据,但它不能像 HDFS 那样容易地进行水平扩展。因此,当 writing/querying 来自 Spark to/on Postgres 的大量数据时,数据库可能成为瓶颈。但是如果你处理的数据是OLTP类型的,那么你可以考虑这种架构。
希望对您有所帮助
我正在为我的公司构建数据架构。一个包含内部和外部数据的简单 ETL,旨在构建静态仪表板和其他搜索趋势。
我试着一个一个地思考 ETL 过程的每一步,现在我在质疑 Load 部分。
我计划使用 Spark(开发上的 LocalExcecutor 和 Azure 上的服务用于生产)所以我开始考虑将 Parquet 用于 Blob 服务。我知道 Parquet 相对于 CSV 或其他存储格式的所有优势,我真的很喜欢这项技术。我阅读的大多数关于 Spark 的文章都以 df.write.parquet(...)
.
但我不明白为什么我可以只启动一个 Postgres 并将所有内容保存在这里。我知道我们不会每天产生 100Go 的数据,但我想在一家快速发展的公司中构建一些面向未来的东西,这将通过业务以及我们开始记录越来越多的日志和指标来产生指数级数据。
任何 pros/cons 更有经验的开发人员?
编辑:这条推文也让我质疑:https://twitter.com/markmadsen/status/1044360179213651968
主要的权衡是成本和交易语义之一。
使用 DBMS 意味着您可以事务性地加载数据。您还需要支付两者的费用 storage and compute on an on-going basis. The storage costs for the same amount of data are going to be more expensive in a managed DBMS vs a blob store。
在 DBMS 上扩展处理也更难(看起来 Azure 提供的最大 Postgres 服务器有 64 个 vcpus)。通过将数据存储到 RDBM 中,与使用 Spark + blob 存储相比,您可能会 运行 更快地克服 IO 或计算瓶颈。但是,对于许多数据集,这可能不是问题,正如推文所指出的那样,如果您可以使用 SQL 在数据库中完成所有操作,那么它的架构就简单得多。
如果您将 Parquet 文件存储在 blob 存储上,则在不重新生成大部分数据的情况下更新现有数据是很困难的(而且我不知道 Azure 的详细信息,但通常不能以事务方式完成)。计算成本与存储成本是分开的。
使用原始文件格式在 Hadoop 中存储数据效率极低。 Parquet 是一种行列文件格式,非常适合快速查询大量数据。正如您上面所说,将数据从 Spark 写入 Parquet 非常简单。还使用分布式处理引擎(Spark)将数据写入分布式文件系统(Parquet+HDFS),使整个流程无缝衔接。这种架构非常适合 OLAP 类型的数据。
另一方面,Postgres 是一个关系数据库。虽然它适用于存储和分析事务数据,但它不能像 HDFS 那样容易地进行水平扩展。因此,当 writing/querying 来自 Spark to/on Postgres 的大量数据时,数据库可能成为瓶颈。但是如果你处理的数据是OLTP类型的,那么你可以考虑这种架构。
希望对您有所帮助