【问题标题】:Obtain value from HBase table by key按键从 HBase 表中获取值
【发布时间】:2015-05-06 20:37:19
【问题描述】:

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

【问题讨论】:

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


    【解决方案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) 让它稍微快一点。

    【讨论】:

      【解决方案2】:

      我在 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;
      }
      

      再说一次,我不知道 M/R 对数十亿条记录的效果如何。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-29
        • 1970-01-01
        • 2011-12-04
        • 2011-07-17
        • 1970-01-01
        • 2015-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多