我希望外面有人可以帮助我解决这个问题。我目前正在做一个数据管道项目,目前的困境是要在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
存在这种情况:
我找不到哪种方法更好的有用信息。我应该使用Redshift还是实木复合地板足够好?
如果有人告诉我是否有其他方法可以将Spark与Redshift连接,那也很棒,因为我在网上只能看到两种解决方案-JDBC和Spark-Reshift(Databricks)
P.S。定价模型对我来说并不重要,我正在处理数百万个事件数据。
答案 0 :(得分:1)
以下是一些想法/建议
我建议的体系结构:
事件->在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中可以轻松管理。