Hadoop中的索引过程

Div*_*vas 3 hadoop

任何机构都可以向我解释Hadoop中的索引过程是什么意思。它是否类似于我们在 RDBMS 中所做的传统数据索引,因此在 Hadoop 中进行相同的类比,我们索引数据块并将块的物理地址存储在某些数据结构中。所以这将是集群中的一个额外空间。

用谷歌搜索这个话题,但没有得到任何令人满意和详细的东西。任何指针都会有所帮助。

提前致谢

小智 5

Hadoop 将数据存储在文件中,并且不索引它们。为了找到一些东西,我们必须运行一个 MapReduce 作业来处理所有数据。当数据对于数据库来说太大时,Hadoop 是高效的。对于非常大的数据集,重新生成索引的成本非常高,您无法轻松索引更改数据。

但是,我们可以使用两种类型在 HDFS 中使用索引。基于文件的索引和基于 InputSplit 的索引。假设我们有 2 个文件要存储在 HDFS 中进行处理。第一个是 500 MB,第二个是大约 250 MB。因此,我们将在第一个文件上有 4 个 128MB 的 InputSplits,在第二个文件上有 3 个 InputSplits。对于上述情况,我们可以应用 2 种类型的索引 - 1. 使用基于文件的索引,您将得到 2 个文件(此处设置完整数据),这意味着您的索引查询将等同于完整扫描查询 2. 使用 InputSplit基于索引,您将得到 4 个 InputSplits。性能肯定比做全扫描查询要好。

现在,为了实现 InputSplits 索引,我们需要执行以下步骤:

  1. 从完整数据集构建索引 - 这可以通过编写 MapReduce 作业来提取我们想要索引的值,并将其与其 InputSplit MD5 哈希一起输出来实现。
  2. 获取您要查找的索引值的 InputSplit(s) - MapReduce 程序的输出将是 Reduced Files(包含基于 InputSplits 的索引),该文件将存储在 HDFS 中
  3. 仅在索引 InputSplits 上执行您的实际 MapReduce 作业。- 这可以由 Hadoop 完成,因为它能够使用 FileInputFormat.class 检索要使用的 InputSplit 的数量。我们将创建我们自己的 IndexFileInputFormat 类,扩展默认的 FileInputFormat.class,并覆盖其 getSplits() 方法。您必须读取在上一步创建的文件,将所有索引的 InputSplit 添加到一个列表中,然后将该列表与超类返回的列表进行比较。您将仅将在索引中找到的 InputSplits 返回到 JobTracker。
  4. 在 Driver 类中,我们现在必须使用这个 IndexFileInputFormat 类。我们需要设置为 InputFormatClass 使用 - 要使用我们自定义的 IndexFileInputFormat 在 Driver 类中,我们需要提供 job.setInputFormatClass(IndexFileInputFormat.class);

有关代码示例和其他详细信息,请参阅此 -

https://hadoopi.wordpress.com/2013/05/24/indexing-on-mapreduce-2/