2014-02-13 120 views
3

我有一个Hadoop MapReduce作业,其输出是一个行标识符,并且对该行标识符进行了Put/Delete操作。由于问题的性质,产量相当高。我们已经尝试了几种方法来获取这些数据返回到HBase的,他们都失败了......将高容量reducer输出写入HBase

表减速

这是方式要慢,因为它似乎必须做的每一个完整的往返行。由于按键对我们的reducer步骤进行排序,row-id不可能与reducer在同一节点上。

completebulkload

这似乎需要很长的时间(从来没有完成),而且为什么没有真正的迹象。 IO和CPU都显示非常低的使用率。

我错过了一些明显的东西吗?

+2

在我看来,弄清楚为什么completebulkload不起作用是正确的做。它应该工作!也许,你可能会有更多的减速器。 –

回答

0

CompleteBulkLoad是正确的答案。 Per @DonaldMiner我深入挖掘并发现CompleteBulkLoad进程正在运行为“hbase”,导致在尝试移动/重命名/删除源文件时导致权限被拒绝错误。在给出错误消息之前,该实现似乎重试了长的时间;在我们的案件中最多30分钟。

给hbase用户写文件访问权限解决了问题。

1

我从你对自己的回答中看到,你解决了你的问题,但为了完整起见,我提到还有另一种选择 - 直接写入hbase。我们建立了一个将数据传输到HBase的地方,并且通过适当的密钥和区域分割,我们得到每节点每秒超过15,000个1K记录

+0

我们的减速机非常自然,每个输入分割都有许多区域的按键。如果你知道一些后减速器hbase分离器方法,请分享它。 –

+0

正如我所说的,我们在流媒体设置中做的不是批量更新 - 但原则仍然认为您可以在reducer中创建常规hbase连接,并且如果您正确设计hbase,则可以高效地写入hbase,批量编写,调谐你的hbase等:) - 如果使用BulkLoad对你来说足够好,那么它可能会更简单 –