Mapreduce 按键从HBase表中获取值

Mapreduce 按键从HBase表中获取值,mapreduce,hive,hbase,apache-pig,apache-spark-sql,Mapreduce,Hive,Hbase,Apache Pig,Apache Spark Sql,有一个包含数百亿条记录的HBase表,其中一个键是一行40字节。还有数十万把钥匙的清单。我需要用这个键获取所有记录,并返回某个表字段的值。因此,我的目的是将一组键转换为一组值。(使用任何编程语言和技术)执行任务最方便和/或有效的方法是什么?我在MongoDB上测试MapReduce,看看它从集合中获取键/值对的效率有多高。这只是一个10万条记录的集合,但一个小JavaScript函数能够检索所有国家以及它们在集合中出现的次数 Map1 = function() { Emit(this.c

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

我在MongoDB上测试MapReduce,看看它从集合中获取键/值对的效率有多高。这只是一个10万条记录的集合,但一个小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;
}
Map1=函数()
{
排放(这个国家,1)
}
Reduce1=功能(键,VAL){
对于(变量i=0,总和=0;i

再说一次,我不知道拥有数十亿条记录的M/R有多有效

您可以使用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) 
conf=HBaseConfiguration.create()
conf.set(“hbase.zookeeper.quorum”,“zookeeper被hbase使用”)
connection=ConnectionFactory.createConnection(conf)
table=connection.getTable(“tablename”)
获取=新的ArrayList()
所有钥匙{
添加(新的Get(key.toBytes())
}
table.get(获取)
还有一些建议:

  • 看看GetJavadocs,您可以将其配置为只返回列 你对什么感兴趣
  • 若键共享一些公共前缀,那个么使用带有开始/停止行的扫描也可以工作。调用scan.setCaching(5000)使其在使用时稍微快一点