按键从HBase表中获取值

时间:2015-05-06 20:37:20

标签: mapreduce hive hbase apache-pig apache-spark-sql

有一个HBase表,其中包含数十亿条记录,其中一个键是一个40字节的行。还有一个包含数十万个键的列表。我需要使用此键获取所有记录并返回某些表字段的值。所以,我的目的是将一组键转换为一组值。执行任务的最方便和/或最有效的方法是什么(使用任何编程语言和技术)?

2 个答案:

答案 0 :(得分:1)

您可以使用HBase Java API。在类似java的伪代码

conf = HBaseConfiguration.create()
conf.set("hbase.zookeeper.quorum", "ZOOKEEPER_USED_BY_HBASE")
connection = ConnectionFactory.createConnection(conf)
table = connection.getTable("tablename")
gets = new ArrayList<Get>()
for all keys {
    gets.add(new Get(key.toBytes()))
}
table.get(gets) 

还有一些建议:

  • 看看Get javadocs,您可以将其配置为仅返回列 你有兴趣
  • 如果密钥使用带开始/停止行的扫描共享某些公共前缀也可能有效。如果您使用它,请调用scan.setCaching(5000)以使其稍微快一些。

答案 1 :(得分:0)

我在MongoDB上测试MapReduce,看看从集合中获取键/值对的效率。它只是一个包含100k记录的集合,但是一个小的JavaScript函数能够检索所有国家和它们在集合中出现的次数。

Map1 = function()
{
    Emit(this.country, 1)
}

    Reduce1 = function(key, vals) {
for(var i=0, sum=0; i < vals.length; i++)
{
    sum += vals[i];
}
return sum;
}

然后,我再也不知道M / R对数十亿条记录的效果如何。