Amazon web services 对于小数据集,AWS Athena MSCK修复表花费的时间太长
我对amazon athena有问题,我有一个小bucket(36430个对象,9.7MB),有4个分区级别(我的bucket/p1=ab/p2=cd/p3=ef/p4=gh/file.csv),但是当我运行命令时Amazon web services 对于小数据集,AWS Athena MSCK修复表花费的时间太长,amazon-web-services,amazon-s3,hive,amazon-athena,Amazon Web Services,Amazon S3,Hive,Amazon Athena,我对amazon athena有问题,我有一个小bucket(36430个对象,9.7MB),有4个分区级别(我的bucket/p1=ab/p2=cd/p3=ef/p4=gh/file.csv),但是当我运行命令时 MSCK修复表db.TABLE 需要25分钟,我计划在雅典娜上公布结核病严重程度的数据,如果这个问题仍然存在,我不会这么做 有人知道为什么花的时间太长吗 提前感谢可能是一个代价高昂的操作,因为它需要扫描文件系统(S3存储桶)中表的子树。由于需要遍历额外的子目录,多层分区可能会使其成本
MSCK修复表db.TABLE
需要25分钟,我计划在雅典娜上公布结核病严重程度的数据,如果这个问题仍然存在,我不会这么做
有人知道为什么花的时间太长吗
提前感谢可能是一个代价高昂的操作,因为它需要扫描文件系统(S3存储桶)中表的子树。由于需要遍历额外的子目录,多层分区可能会使其成本更高。假设所有可能的分区值组合都出现在数据集中,这可能会导致组合爆炸
如果要向现有表中添加新分区,则可能会发现为单个新分区运行命令更有效。这避免了扫描文件系统中表的整个子树的需要。它不如简单地运行MSCK REPAIR TABLE
方便,但有时优化是值得的。一个可行的策略通常是使用MSCK REPAIR TABLE
进行初始导入,然后在新数据添加到表中时使用ALTER TABLE ADD PARTITION
进行持续维护
如果使用
altertableaddpartition
直接管理分区确实不可行,那么执行时间可能是不可避免的。减少分区的数量可能会减少执行时间,因为它不需要遍历文件系统中那么多的目录。当然,分区是不同的,这可能会影响查询执行时间,因此这是一种折衷。虽然标记的答案在技术上是正确的,但它并不能解决您的真正问题,即您有太多的文件
我有一个小水桶(36430个对象,9.7MB),有4个级别的
分区(我的bucket/p1=ab/p2=cd/p3=ef/p4=gh/file.csv)
对于这样一个小的表,36430个文件在S3上产生了巨大的开销,并且具有4个级别的分区是非常过分的。分区阻碍了查询性能,而不是优化它。MSCK很慢,因为它正在等待S3上市
如果雅典娜把整个9.7MB的表放在一个文件中,那么它的读取速度会比列出那个庞大的目录结构的速度快
我建议完全删除分区,或者如果确实必须删除分区,则删除p2、p3和p4级别。也可以考虑将它处理到另一个表中,以将文件压缩为更大的文件。
一些人建议最佳文件大小在64MB到4GB之间,这与S3上的本机块大小有关。拥有集群中多个工作者的文件也很有帮助,尽管雅典娜不知道这一点。您的数据小于该范围,因此最多1个或8个文件是合适的
一些参考资料:
用于
更改表添加分区的新链接。