我有一个mapreduce程序,它首先扫描一个HBase表。
我想要一些reducer输出转到hdfs并将一些reducer输出写入hbase表。可以将reducer配置为输出到两个不同的位置/格式吗?
答案 0 :(得分:3)
可以将reducer配置为使用MulitpleOutputs
class来输出多个文件。该类顶部的文档提供了写入多个文件的明确示例。但是,由于没有内置Outputformat来写入HBase,您可以考虑将第二个流写入HDFS上的特定位置,然后使用另一个作业将其插入HBase。
答案 1 :(得分:1)
如果您不想编写太多代码,只需在mapper或reducer的setup方法中打开一个Table,然后在您的hbase表中执行put语句。另一方面,编写您的作业,使输出文件是一个hdfs文件。这样你就可以写入hbase和hdfs。
更详细的说,当你执行context.write()时,你会写入hdfs文件,另一方面,当你执行put时,table.put会发生。
另外,不要忘记在cleanup()方法中关闭表和其他任何内容。唯一的背景是,如果让我们说1000个映射器,你的表连接将被打开1000次,但在任何给定点,只有你的映射器的最大数量真正运行,所以这可能是50,这取决于你的设置。至少对我有用!
答案 2 :(得分:1)
我认为多个输出可以完成这项工作.. chk tis out http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html