我正在存储数 TB 的点击流类型用户事件数据。它需要按日期进行索引或分区,以便可以合理快速地查询狭窄的日期范围。我希望能够对此运行聚合作业和查询。我希望在 Amazon EMR 或类似的东西中使用 Spark。
一个选项是按天+小时分区的 S3 平面文件,如:
s3://my-bucket/20160503_00/data.txt
s3://my-bucket/20160503_01/data.txt
s3://my-bucket/20160503_02/data.txt
我更有可能使用 Parquet 列式存储而不是像这样的原始文本:
s3://my-bucket/20160503_00/data.parquet
s3://my-bucket/20160503_01/data.parquet
s3://my-bucket/20160503_02/data.parquet
另一个选项是完整的 Amazon DynamoDB?
各自的优缺点是什么?
最佳答案
您可以通过 AWS Kinesis Firehose 从 AWS Kinesis 流式传输数据缓冲您的数据并将其保存到 128MB or 15 minute chunks 中较小的 S3 . Firehose 会自动将您的 block 放入子文件夹中,以启用您需要的基于范围的查找。
https://stackoverflow.com/questions/37403770/