任何机构都可以解释一下Hadoop中索引过程的含义。 它是否类似于我们在RDBMS中进行的传统数据索引,因此在Hadoop中使用相同的类比,我们索引数据块并将块的物理地址存储在某些数据结构中。 因此它将成为集群中的一个额外空间。
围绕这个主题进行了搜索,但无法获得任何令人满意和详细的信息。 任何指针都会有所帮助。
提前致谢
答案 0 :(得分:4)
Hadoop将数据存储在文件中,而不对其进行索引。要查找内容,我们必须运行MapReduce作业,遍历所有数据。 Hadoop在数据对于数据库来说太大的情况下是高效的。对于非常大的数据集,重新生成索引的成本非常高,您无法轻松索引更改的数据。
但是,我们可以使用两种类型的HDFS中的索引编制。基于文件的索引&基于InputSplit的索引。 让我们假设我们有2个文件存储在HDFS中进行处理。第一个是500 MB,第二个是大约250 MB。因此,我们在第一个文件上有4个InputSplits,每个128MBMB,在第二个文件上有3个InputSplits。 我们可以为上述案例应用两种类型的索引 - 1.使用基于文件的索引,您最终将得到2个文件(此处设置完整数据),这意味着您的索引查询将等同于完整扫描查询 2.使用基于InputSplit的索引,最终会得到4个InputSplits。性能应该比执行完整扫描查询更好。
现在,为了实现InputSplits索引,我们需要执行以下步骤:
对于代码示例和其他详细信息,请参阅 -
https://hadoopi.wordpress.com/2013/05/24/indexing-on-mapreduce-2/
答案 1 :(得分:3)
我们可以识别2个不同的粒度级别来创建索引:基于文件URI的索引或基于InputSplit的索引。我们来看两个不同的数据集示例。
索引
第一个例子:
数据集中的2个文件适合25个块,并且已被识别为7个不同的InputSplits。您要查找的目标(灰色突出显示)在文件#1(块#2,#8和#13)和文件#2(块#17)上可用
使用基于文件的索引,您最终会得到2个文件(此处设置完整数据),这意味着您的索引查询将等同于完整扫描查询 使用基于InputSplit的索引,您最终将获得7个可用的4个InputSplits。性能应该绝对优于完整扫描查询 索引
我们来看第二个例子:
这次,相同的数据集已按您要编制索引的列进行排序。您要查找的目标(灰色突出显示)现在可在文件#1(块#1,#2,#3和#4)上使用。
使用基于文件的索引,您最终只会得到数据集中的1个文件 使用基于InputSplit的索引,您最终可以使用7个InputSplit 7 对于这个特定的研究,我决定使用自定义的基于InputSplit的索引。我认为,这种方法应该在实施所需的努力,在性能优化方面可能带来的附加价值以及无论数据分布如何的预期适用性之间取得很好的平衡。