【问题标题】:Hadoop mapper output to HBase table and a reducerHadoop 映射器输出到 HBase 表和减速器
【发布时间】:2014-07-01 21:08:49
【问题描述】:

我正在尝试编写一个解析 CSV 文件的 MapReduce 作业,将数据存储在 HBase 中并一次性执行 reduce 功能。理想情况下我会喜欢

  1. Mapper 输出好的记录到 HBase 表 GOOD
  2. Mapper 将不良记录输出到 HBase 表 BAD
  3. Mapper 使用 key 将所有好的数据发送到 reducer
  4. 还想更新第三个表,表明存在新数据。该表将包含有关数据和日期的基本信息。每个 CSV 文件很可能有一或两条记录。

我知道如何使用 HBase MultiTableOutputFormat 执行 1 和 2,但不确定如何执行 3 和 4。

非常感谢任何有关如何执行此操作的指示。

我对如何做到这一点有一些想法:

对于 1 和 2,我将 ImmutableBytesWriteable 作为键,MultiTableOutputFormat 负责从 Mapper 存储。但是对于 3,我希望键是 Text。

对于#4,我应该在 Mapper 中这样做吗

  1. 扫描第三个 HBase 表以查找条目,如果没有则填充,否则跳过。我不喜欢这样,因为感觉效率很低。
  2. 或者我应该在 Mapper 中维护一个 List 并在 Mapper 清理方法中写入 HBase?
  3. 有没有更好的方法来做到这一点?

【问题讨论】:

    标签: java hadoop mapreduce hbase multiple-tables


    【解决方案1】:
    • mapper 通过设置 KeyValueTextInputFormat 读取 csv。

    • 在mapper代码中,有一些逻辑来区分好记录和坏记录,并使用Put(Hbase Api调用)将它们放入Hbase。

    在映射器设置中,可以初始化 hbaseTable 的处理程序。

    可以使用 context.write(key,value) 将好的记录传递给reducer并收集到reducer中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      • 2017-10-13
      • 1970-01-01
      • 2010-10-23
      相关资源
      最近更新 更多