Jor*_*rza 7 hive amazon-s3 amazon-web-services amazon-athena
我遇到了amazon athena的问题,我有一个小桶(36430个对象,9.7 mb),有4级分区(my-bucket/p1 = ab/p2 = cd/p3 = ef/p4 = gh/file.csv)但是当我运行命令时
MSCK REPAIR TABLE db.table
我花了超过25分钟,我计划在Athena上放置结核病的数据,如果这个问题仍然存在,我将不会这样做
有谁知道为什么要花太长时间?
提前致谢
MSCK REPAIR TABLE可能是一项代价高昂的操作,因为它需要在文件系统(S3存储桶)中扫描表的子树.多级分区可能会使其成本更高,因为它需要遍历其他子目录.假设分区值的所有潜在组合都出现在数据集中,这可能会变成组合爆炸.
如果要向现有表添加新分区,则可能会发现ALTER TABLE ADD PARTITION为各个新分区运行命令更有效.这样就无需在文件系统中扫描表的整个子树.它不如简单运行方便MSCK REPAIR TABLE,但有时优化是值得的.一种可行的策略通常MSCK REPAIR TABLE用于初始导入,然后ALTER TABLE ADD PARTITION在将新数据添加到表中时用于持续维护.
如果用于ALTER TABLE ADD PARTITION直接管理分区实际上是不可行的,那么执行时间可能是不可避免的.减少分区数可能会缩短执行时间,因为它不需要遍历文件系统中的多个目录.当然,那么分区是不同的,这可能会影响查询执行时间,所以这是一个权衡.
虽然标记的答案在技术上是正确的,但它并没有解决您的真正问题,即您有太多文件。
我有一个小桶(36430 个对象,9.7 mb),有 4 级分区( my-bucket/p1=ab/p2=cd/p3=ef/p4=gh/file.csv )
对于这么小的表,36430个文件在S3上造成了巨大的开销,4级分区是超级矫枉过正的。分区阻碍了查询性能而不是优化它。MSCK 很慢,因为它正在等待 S3 上市等。
如果 Athena 将整个 9.7MB 表放在一个文件中,那么它读取整个 9.7MB 表的速度会比列出庞大目录结构的速度快。
我建议完全删除分区,或者如果您确实必须删除它们,则删除 p2、p3 和 p4 级别。还可以考虑将其处理到另一个表中以将文件压缩为更大的文件。
有人建议最佳文件大小在 64MB 到 4GB 之间,这与 S3 上的本机块大小有关。拥有一些文件是集群中工作程序的倍数也很有帮助,尽管 Athena 不知道这一点。您的数据小于该范围,因此最多 1 个或 8 个文件是合适的。
一些参考:https : //aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/#OptimizeFileSizes
https://www.upsolver.com/blog/small-file-problem-hdfs-s3
| 归档时间: |
|
| 查看次数: |
2658 次 |
| 最近记录: |