【问题标题】:Giving Hashmap as input to Mapper instead of a file将 Hashmap 作为 Mapper 的输入而不是文件
【发布时间】:2015-10-01 15:04:04
【问题描述】:

我正在编写一个 MR 代码来对 HBASE 和 HDFS 中可用的数据执行正则表达式模式匹配。 我的输入文件是一个大型 CSV 文件,其中包含从 HBASE 获取唯一数据的密钥。此输入文件可以有重复项。

我的问题 - 在我的 Main 类中 - 我想读取 Input 文件并执行一些处理并将数据保存到 hashmap 中,然后再将其提供给 mapper 类。 在我见过的所有示例中,我们只能输入文件路径作为映射器类的输入, 有没有办法将哈希图输入到映射器而不是文件?

谢谢你 普拉奈维亚斯

【问题讨论】:

    标签: java regex hadoop mapreduce hashmap


    【解决方案1】:

    两件事: Map reduce 对 HDFS 中的数据起作用。因此,您最好的选择是将地图数据保存为 HDFS 中的文件,然后转向减少地图。 但是,由于您的数据来自 HBase,为什么不使用this,并读取数据并对其执行正则表达式操作。如果我错过了什么,请告诉我

    【讨论】:

    • 谢谢 Ramzy,我必须处理输入文件中的数据。对于输入文件上的每条记录,从 HBASE 和 HDFS 获取详细信息并执行正则表达式扫描。这就是我所做的 - 将此输入文件传递给映射器类,在映射器类中,我正在读取 HBASE、HDFS 并扫描文档上的正则表达式。找到正则表达式后,我更新了 HBASe 和 SolR 索引。
    • 由于我的输入文件的大小非常小,无法创建多个映射器,因此我实现了根据输入文件大小创建映射器数量的方法。根据大小和记录数,最多 12 个映射器和最少 1 个映射器。
    • 好的。可以有多种方法来做同样的事情。如果您达到了所需的性能,那一切都很好。但是,映射器的数量由框架根据输入拆分的数量决定。因此,除非您说“不要拆分”,或者编写了自己的记录阅读器,否则我不确定在代码中控制映射器是否是一种好习惯
    • 谢谢,映射器的控制和控制级别在配置文件中参数化。我的输入文件通常小于一个块大小,所以默认情况下,我总是有 1 个映射器。因此,我要么编写自己的拆分代码,要么根据输入记录的数量控制映射器。但总的来说,我能够达到预期的性能,我能够在 21 秒内使用 11 个映射器扫描 50 个文档以获取 70 个正则表达式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    相关资源
    最近更新 更多