【问题标题】:How to load the latest 100 rows from Hbase to Spark如何将最新的 100 行从 Hbase 加载到 Spark
【发布时间】:2015-12-23 16:23:42
【问题描述】:

我正在使用 Spark 将 Hbase 数据加载到 JavaPairRDD。现在,我想知道是否可以将最新的 100 行加载到 Spark 中,而不是从 Hbase 加载所有行。 1)我尝试了scan.setCaching(100),但它仍然返回了所有行。是否为了限制我从 Hbase 加载的行? 2) 我怎样才能确保它是最新的 100 行

有什么想法吗?非常感谢。

    Scan scan = new Scan();
    scan.setFilter(A list of filters);
    scan.setCaching(100);

    ClientProtos.Scan proto = ProtobufUtil.toScan(scan);
    String scanStr = Base64.encodeBytes(proto.toByteArray());

    hbaseConfig.set(TableInputFormat.INPUT_TABLE, tableName);
    hbaseConfig.set(TableInputFormat.SCAN,scanStr);

    JavaPairRDD<ImmutableBytesWritable, Result> hBaseRDD = 
            javaSparkContext.newAPIHadoopRDD(hbaseConfig, TableInputFormat.class, ImmutableBytesWritable.class, Result.class).cache();

【问题讨论】:

    标签: java apache-spark hbase


    【解决方案1】:

    Scan.setCaching 用于指定一次 RPC 调用中的结果计数,当您将其设置为 100 时,您的客户端将得到 100 x 100 的结果,如果有 100 个结果,如果没有,您将获得准确的结果计数一个 RPC 调用。 SetCaching 是网络性能相关的优化,不会改变你得到的 db 的结果数。

    对于有序结果,例如最后 100 个,您需要定义什么是 LAST ?用户的最后 100 个活动,或所有表中的最后 100 个插入行?如果你的意思是表,hbase 不会按照你写的顺序返回你的数据,它会按照行键字节值的顺序返回,所以你应该让你的行键基于时间来获得有序的结果。但是rowkey第一部分的时间会产生热点区域,所以你不应该这样做:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 2012-12-31
      • 1970-01-01
      • 2018-07-03
      相关资源
      最近更新 更多