雅典娜VS Redshift的实木复合地板

时间:2019-03-08 04:15:57

标签: apache-spark amazon-s3 amazon-redshift parquet

我希望外面有人可以帮助我解决这个问题。我目前正在做一个数据管道项目,目前的困境是要在Athena上使用镶木地板还是将其存储到Redshift

2种情况: 首先,

EVENTS --> STORE IT IN S3 AS JSON.GZ --> USE SPARK(EMR) TO CONVERT TO PARQUET --> STORE PARQUET BACK INTO S3 --> ATHENA FOR QUERY --> VIZ

第二,

EVENTS --> STORE IT IN S3 --> USE SPARK(EMR) TO STORE DATA INTO REDSHIFT

存在这种情况:

  1. 使用Redshift的Spark JDBC速度慢
  2. 数据砖的Spark-Redshift回购构建失败,并于2年前进行了更新

我找不到哪种方法更好的有用信息。我应该使用Redshift还是实木复合地板足够好?

如果有人告诉我是否有其他方法可以将Spark与Redshift连接,那也很棒,因为我在网上只能看到两种解决方案-JDBC和Spark-Reshift(Databricks)

P.S。定价模型对我来说并不重要,我正在处理数百万个事件数据。

3 个答案:

答案 0 :(得分:1)

以下是一些想法/建议

  • 不要使用JDBC。
  • Spark-Redshift可以正常工作,但是是一个复杂的解决方案。
  • 您不必使用spark转换为镶木地板,也可以使用蜂巢。 看到 https://docs.aws.amazon.com/athena/latest/ug/convert-to-columnar.html
  • 雅典娜在镶木地板上使用时非常棒,因此您无需使用 完全红移
  • 如果要使用Redshift,请使用Redshift频谱设置一个 查看您的实木复合地板,然后在必要时使用CTAS 如有需要,请进行红移以导入数据。
  • AWS Glue Crawler可以是创建所需的元数据的好方法 将镶木地板映射到雅典娜和Redshift Spectrum。

我建议的体系结构:

事件->在S3中存储->将HIVE转换为镶木地板->直接在雅典娜中使用

和/或

事件->将其存储在S3中->将HIVE转换为镶木地板->使用Redshift Spectrum直接在Redshift中使用

您可能不需要转换为镶木地板,如果您使用正确的分区结构(s3文件夹)并先对数据进行gzip压缩,然后再选择Athena / spectrum,那么在没有转换为镶木地板的复杂性的情况下,性能可以足够好。这取决于您的用例(您需要运行的数据量和查询类型)。

答案 1 :(得分:0)

使用哪种取决于您的数据和访问模式。雅典娜直接使用S3密钥结构来限制要扫描的数据量。假设您有事件的类型和时间。 S3键可以是例如yyyy/MM/dd/type/*type/yyyy/MM/dd/*。前一种密钥结构使您可以按日期或日期和类型限制要扫描的数据量,但不能单独键入。如果您只想按类型x搜索,但不知道日期,则需要进行完整的存储桶扫描。后面的关键模式将是相反的方式。如果您只需要一种方式(例如按时间)访问数据,那么雅典娜可能是个不错的选择。

另一方面,Redshift是基于PostgreSQL的数据仓库,它比Athena更复杂和灵活。数据分区在性能方面起着很大的作用,但是可以通过多种方式来设计模式以适合您的用例。以我的经验,将数据加载到Redshift的最佳方法是首先将其存储到S3,然后使用COPY https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html。它比JDBC快了多个数量级,而我发现JDBC仅适合用于少量数据的测试。这也是Kinesis Firehose将数据加载到Redshift的方式。如果您不想自己实现S3复制,Firehose可以提供一种替代方法。

答案 2 :(得分:0)

问题中缺少一些细节。您将如何管理数据管道中的增量更新。

如果已实现“尺寸缓慢变化”(SCD类型1或2),则无法使用镶木地板文件进行管理。但这在Redshift中可以轻松管理。