Hadoop 在MapReduce中以最佳方式执行HBase查询
问题 我们有多个HBase表:A、B、C。假设A是需要处理的记录队列。它可能包含平均2500万条记录。A有用户ID。B有每个用户执行的网站点击。B可以包含数十亿行。C有一些关于用户的辅助信息 我们使用MapReduce作业对队列中的记录执行预测分析(成千上万的决策树)。问题的范围不包括实际的分析建模 问题:Hadoop 在MapReduce中以最佳方式执行HBase查询,hadoop,mapreduce,hbase,cloudera,Hadoop,Mapreduce,Hbase,Cloudera,问题 我们有多个HBase表:A、B、C。假设A是需要处理的记录队列。它可能包含平均2500万条记录。A有用户ID。B有每个用户执行的网站点击。B可以包含数十亿行。C有一些关于用户的辅助信息 我们使用MapReduce作业对队列中的记录执行预测分析(成千上万的决策树)。问题的范围不包括实际的分析建模 问题: MR job正在对表B和C执行特殊查询。例如,映射任务1执行查询以获取用户1的点击,映射任务2执行查询以获取用户2的点击。如果这些命中结果出现在同一个区域服务器上,是否会影响性能(竞赛条件等
我们正在使用cloudera CDH 3(hadoop,hbase)。这不是很容易解决的问题,但我可以建议使用bloomfilter+reduce join 构建bloomfilter和B的受影响区域集
Map: A -> BF(A), S = {regions of B}
使用自定义InpufFormat,它将使用受影响的区域进行B表扫描,并扫描整个表A
Map: B U S -> (tag 'B', keyB => value)
A -> (tag 'A', keyA => value)
Reduce: reduce-join
在Reduce中进行分析工作