3

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

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

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

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

4

1 回答 1

3
  1. Hive 中的索引从未在现实生活中使用过,也从未有效,正如@mazaneicha 在评论中注意到的那样,索引功能在 Hive 3.0 中已完全删除,请阅读此 Jira:HIVE-18448。无论如何,这是一次很棒的尝试,感谢Facebook 的支持,我们吸取了宝贵的经验教训。

但是 ORC 中有轻量级索引(嗯,实际上不是经典索引,而是 min、max 和 Bloom 过滤器,它有助于修剪条纹)。如果在插入期间对数据进行排序(分布+排序),则 ORC 索引和布隆过滤器是有效的

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

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

考虑使用带有内置索引和 Bloom 过滤器的 ORC,在表中保留较少数量的文件以避免元数据过载并避免映射器复制数千个文件。在 Hive面试问题中阅读此分区和 Hive 中的此排序表

有用的链接。

官方文档:LanguageManual

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

于 2020-04-20T07:33:43.853 回答