在阅读了查询优化技术后,我开始了解以下技术。
1. Indexing - bitmap and BTree
2. Partitioning
3. Bucketing
我了解了分区和分桶之间的区别,以及何时使用它们,但我仍然对索引的实际工作方式感到困惑。索引的元数据存储在哪里?是存储它的名称节点吗?也就是说,实际上在创建分区或桶时我们可以在 hdfs 中看到多个目录,这解释了查询性能优化但如何可视化索引?尽管图片中有分区和分桶,但它们真的在现实生活中使用吗?
请帮助我解决上述问题,是否有专门针对 hadoop 和 hive 开发人员社区的页面?
最佳答案
- Hive 中的索引从未在现实生活中使用过,也从来没有效率过,正如@mazaneicha 在评论中注意到的那样,索引功能在 Hive 3.0 中已完全删除,请阅读此 Jira:HIVE-18448 .多亏了 Facebook support,这无论如何都是一次很棒的尝试,吸取了宝贵的教训。
但是 ORC 中有轻量级索引(好吧,实际上不是经典索引,而是最小、最大和布隆过滤器,它有助于修剪条纹)。 ORC 索引和布隆过滤器如果数据在插入时被排序(分发+排序)是高效的
如果分区架构与表的过滤方式或加载方式相对应(允许并行加载分区,如果增量数据是整个分区,则分区效率最高)。
分桶可以帮助优化联接和分组依据,但 sort-merge-bucket-mapjoin 有严重的限制,因此效率也不高。两个表应该具有相同的分桶模式,这在现实生活中很少见或者效率极低。加载桶时也应对数据进行排序。
考虑使用带有内置索引和布隆过滤器的 ORC,在表中保留较少数量的文件以避免元数据过载并避免映射器复制数千个文件。 阅读此 partitions in hive interview questions还有这个Sorted Table in Hive
有用的链接。
官方文档:LanguageManual
Cloudera 社区:https://community.cloudera.com/
关于hadoop - 注册 : Efficiency among query optimizers in hive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61300659/