Reg :配置单元中查询优化器的效率

Reg : Efficiency among query optimizers in hive

阅读查询优化技术后,我开始了解以下技术。

1. Indexing - bitmap and BTree
2. Partitioning
3. Bucketing

我了解了分区和分桶之间的区别,以及何时使用它们,但我仍然对索引的实际工作方式感到困惑。索引的元数据存储在哪里?是存储它的名称节点吗?也就是说,实际上在创建分区或桶时我们可以在 hdfs 中看到多个目录,这解释了查询性能优化但如何可视化索引?尽管图片中有分区和分桶,但它们真的在现实生活中使用吗?

请帮助我解决上述问题,是否有专门针对 hadoop 和 hive 开发人员社区的页面?

  1. Hive 中的索引从未在现实生活中使用过,也从来没有效率,正如@mazaneicha 在评论中注意到的那样,Hive 3.0 中完全删除了索引功能,请阅读此 Jira:HIVE-18448. It was a great try any way, thanks to Facebook support,已吸取宝贵的经验教训.

但是 ORC 中有轻量级索引(好吧,实际上不是经典索引,而是最小、最大和布隆过滤器,它有助于修剪条纹)。 ORC 索引和 bloom 过滤器如果在插入期间对数据进行排序(distribute+sort)

  1. 如果分区模式对应于 table 的过滤方式或加载方式(允许并行加载分区,如果增量数据是整个分区它有效地工作)。

  2. Bucketing 可以帮助优化连接和分组依据,但 sort-merge-bucket-mapjoin 有严重的限制,使其效率不高。两个 table 应该有相同的分桶模式,这在现实生活中很少见或者效率极低。加载桶时也应该对数据进行排序。

考虑使用带有内置索引和 Bloom 过滤器的 ORC,减少 table 中的文件数量以避免元数据过载并避免映射器复制数千个文件。 阅读此 and this

有用的链接。

官方文档:LanguageManual

Cloudera 社区:https://community.cloudera.com/