【发布时间】:2012-03-14 16:30:30
【问题描述】:
我有一个首先扫描 HBase 表的 mapreduce 程序。
我想要一些 reducer 输出到 hdfs 并且一些 reducer 输出被写入 hbase 表。可以将减速器配置为像这样输出到两个不同的位置/格式吗?
【问题讨论】:
我有一个首先扫描 HBase 表的 mapreduce 程序。
我想要一些 reducer 输出到 hdfs 并且一些 reducer 输出被写入 hbase 表。可以将减速器配置为像这样输出到两个不同的位置/格式吗?
【问题讨论】:
可以使用MulitpleOutputsclass 将reducer 配置为使用多个文件进行输出。该类顶部的文档为写入多个文件提供了一个清晰的示例。但是,由于没有内置 Outputformat 用于写入 HBase,您可以考虑将第二个流写入 HDFS 上的特定位置,然后使用另一个作业将其插入 HBase。
【讨论】:
如果你不想写太多代码,只需在你的 mapper 或 reducer 的 setup 方法中打开一个 Table 并在你的 hbase 表中执行一个 put 语句。另一方面,编写您的作业,使输出文件为 hdfs 文件。这样你就可以同时写入 hbase 和 hdfs。
更详细地说,当你执行 context.write() 时,你会写入 hdfs 文件,而另一方面,table.put 可能会在你执行 put 时发生。
另外,不要忘记在您的 cleanup() 方法中关闭表格和其他任何内容。唯一的背景是,假设有 1000 个映射器,您的表连接将打开 1000 次,但在任何给定点,只有真正运行的映射器的最大数量,因此可能是 50,具体取决于您的设置。至少对我有用!
【讨论】: