我正在尝试编写一个mapreduce作业,它解析csv文件,将数据存储在hbase中,并一次性执行reduce函数。理想情况下我会
Map器将良好记录输出到hbase表良好
Map器将坏记录输出到hbase表bad
mapper使用一个键将所有好的数据发送到一个reducer
还想更新第三个表,指示是否存在新数据。此表将包含有关数据和日期的基本信息。很可能每个csv文件有一个或两个记录。
我知道如何使用hbase执行1和2 MultiTableOutputFormat
,但不知道怎么做3和4。
任何关于如何做到这一点的指针是非常感谢。
我对如何做到这一点有一些想法:
对于1和2我会 ImmutableBytesWriteable
作为关键和 MultiTableOutputFormat
负责从Map器存储。但对于3我希望关键是文本。
对于#4,我应该在
正在扫描第三个hbase表中的条目,如果没有,则跳过。我不喜欢这样,因为感觉效率很低。
或者我应该在mapper中维护一个列表,并在mapper cleanup方法中写入hbase?
有没有更好的办法?
1条答案
按热度按时间kadbb4591#
Map器通过设置keyvaluetextinputformat读取csv。
在Map程序代码中,有一些逻辑来区分好记录和坏记录,并使用put(hbase api调用)将它们放入hbase中。
在mapper设置中,可以初始化hbasetable的处理程序。
好的记录可以通过context.write(key,value)传递给reducer,并在reducer中收集