0

免责声明:我是一名 RDBMS 人员,最近负责优化大数据系统。因此,我下面的观点和想法可能是幼稚的,本质上不是“大数据”。

问题: 我有一个大数据(Hive + HDFS)系统(目前有大约 1000 万条记录,预计在未来几年内会增长 - 每年大约 2500 万条记录),我们正在尝试在其上构建 adHoc 查询系统。目标是提供一个搜索系统,它可以让客户端提交具有多个过滤条件(where 条件)的查询,并且系统可以支持数据获取,理想情况下,log n 复杂度。我们正在寻找更多的搜索和过滤而不是执行聚合函数。

我知道 hive 不适合 adHoc 查询,而是用于批处理,但目前,我们不想替换 hive。在我的研究中,我认为 Impala 和 Drill 是很好的候选者(如果我遗漏了什么,请纠正我)但是两者似乎都押注并行查询执行而不是内存缓存和索引,并且更像是 Hive 的替代品而不是补充 Hive。

我正在考虑的解决方案:鉴于我们知道数据并且可以预测将经常过滤的列,我在想,构建一个外部缓存系统,该系统由以下两个组件组成,并且会更多地帮助这个案例:

  1. 基于 B-Tree / 跳过列表的列索引,它将过滤条件解析为 id 列表。(多列会有多个索引树)。多个过滤条件将需要经过一个交叉过程,这将导致最终的数据集。

  2. 基于 HashTable / Trie(更倾向于 HashTable)的索引,这将有助于将标识符解析为相应的 Hive 分区(或缓存键)。

使用以上两个,理论上,我们应该能够将给定的查询转换为 log n(优化搜索)中的标识符列表,然后通过仅搜索那些感兴趣的分区来优化实际检索。一个简单的基于 LRU 的缓存可以在“搜索系统”和实际 Hive 之间使用,以更快地检索数据。

问题: 如果您发现任何明显的问题,您能告诉我吗?您能提出任何替代方案吗?与这个想法相比,Impala/Drill 有明显的收益吗?(我更多的是寻找性能提升而不是易于构建)

提前致谢。

4

0 回答 0