Java Hadoop映射器输出到HBase表和一个reducer

Java Hadoop映射器输出到HBase表和一个reducer,java,hadoop,mapreduce,hbase,multiple-tables,Java,Hadoop,Mapreduce,Hbase,Multiple Tables,我正在尝试编写一个MapReduce作业,它解析CSV文件,将数据存储在HBase中,并一次性执行reduce函数。理想情况下,我想 映射器将良好记录输出到HBase表良好 映射器将坏记录输出到HBase表坏 Mapper使用一个键将所有良好的数据发送到reducer 还想更新第三个表,表明存在新数据。此表将包含有关数据和日期的基本信息。很可能每个CSV文件有一个或两个记录 我知道如何使用HBaseMultiTableOutputFormat执行1和2,但不确定如何执行3和4 任何关于如何做到这

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

  • 映射器将良好记录输出到HBase表良好
  • 映射器将坏记录输出到HBase表坏
  • Mapper使用一个键将所有良好的数据发送到reducer
  • 还想更新第三个表,表明存在新数据。此表将包含有关数据和日期的基本信息。很可能每个CSV文件有一个或两个记录
  • 我知道如何使用HBase
    MultiTableOutputFormat
    执行1和2,但不确定如何执行3和4

    任何关于如何做到这一点的建议都是非常感谢的

    关于如何做到这一点,我有一些想法:

    对于1和2,我将使用
    ImmutableBytesWriteable
    作为键,并且
    MultiTableOutputFormat
    负责从映射器存储。但是对于3,我希望关键是文本

    对于#4,我是否应该在

  • 扫描第三个HBase表中的条目,如果没有,则跳过。我不喜欢这个,因为它感觉效率很低
  • 或者我应该在Mapper中维护一个列表,并在Mapper清理方法中写入HBase
  • 有没有更好的办法
    • 映射器通过设置KeyValueTextInputFormat读取csv

    • 在映射程序代码中,使用一些逻辑来区分好记录和坏记录,并使用put(Hbase Api调用)将它们放入Hbase中

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

    可以使用context.write(键、值)将良好记录传递给reducer并在reducer中收集