gpt4 book ai didi

hadoop - Hadoop 中的索引过程

转载 作者:可可西里 更新时间:2023-11-01 14:25:33 25 4
gpt4 key购买 nike

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

围绕这个主题进行了谷歌搜索,但无法获得任何令人满意和详细的信息。任何指针都会有所帮助。

提前致谢

最佳答案

Hadoop 将数据存储在文件中,并且不对它们进行索引。为了找到一些东西,我们必须运行一个遍历所有数据的 MapReduce 作业。 Hadoop 在数据对于数据库来说太大的情况下非常有效。对于非常大的数据集,重新生成索引的成本非常高,您无法轻松地索引不断变化的数据。

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

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

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

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

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

关于hadoop - Hadoop 中的索引过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35771996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com