【问题标题】:Which filter is faster - SingleColumnValueFilter for Scan or spark filter for RDD?哪个过滤器更快 - 用于扫描的 SingleColumnValueFilter 或用于 RDD 的火花过滤器?
【发布时间】:2020-11-16 10:19:34
【问题描述】:

我使用 Hbase 和 Spark。我需要按状态(可能是 0、1、2、3)从表中获取过滤数据。我只需要状态 = 0 的数据——这大约是 Hbase 中所有数据的 5%。

什么会更快 - 使用过滤器扫描 Hbase 或使用 Spark 过滤器过滤所有已读取所有 Hbase 数据的数据的 rdd?

为什么?它取决于什么?

Scan scan = new Scan();
scan.setFilter(new SingleColumnValueFilter(...));
JavaRDD<MyType> rdd = <get data from table with scan>

JavaRDD<MyType> rdd = <get all data from table with new Scan()>
rdd.filter(r->r.getStatus()==0)

【问题讨论】:

  • 你尝试的时候发生了什么?你有没有得到一些意想不到的性能数据?
  • 不,两者都有效。但是现在我无法测试大数据来知道它。
  • 一个小笔记。 HBase 不是为支持这些查询而构建的。它们当然有效,但它们违背了 HBase 的理念。如果有很多数据,这两个查询都将花费很长时间(据说使用 HBase 过滤器的查询更短,如下所述),但通常应避免这些类型的查询或构建特定的索引。

标签: apache-spark hbase


【解决方案1】:

在 HBase 端按列值过滤意味着很慢,因为它需要遍历整个表(实际上有多慢取决于数据大小)。另一方面,不在 HBase 端过滤它意味着您首先必须将整个表传输到 Spark 端,然后通过 Spark 过滤它,不是吗?考虑到您的目标值仅代表整个数据的 5%,我想这将是矫枉过正。不确定您正在处理的数据大小,但这可能会对内存(服务器端和客户端)以及网络流量产生重大影响。考虑到这一切,我认为使用 Spark 过滤器会更糟(顺便说一下,据我所知,它一开始并不一定那么快)

【讨论】:

  • 与我的理解不同。很有趣。
  • 真的吗?如果您只是使用 hbase-spark 进行全面扫描并在 RDD 下游的客户端进行过滤,它会以某种方式将其传播回服务器并且不会传递完整的表?
  • 啊,我正在阅读您的链接。也许这是特定于 SHC 的。我需要检查一下...
  • 随着时间的推移有一些选择。
【解决方案2】:

确定要在 HBase 中进行更快的扫描,您可以尝试查看 FuzzyRowFilter。 https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/FuzzyRowFilter.html

这种类型的过滤器的作用是跳过与您指定的模式不匹配的行键,从而加快扫描速度。它也需要部分模式。

所以在你的情况下,你的状态需要是行键的一部分。

【讨论】:

    【解决方案3】:

    为什么不使用 DS/DF 而不是 RDD?因为后者会随着时间的推移而消失。

    https://blog.cloudera.com/spark-hbase-dataframe-based-hbase-connector/

    我的看法是,由于无法使用 Catalyst Optimizer 禁用谓词下推 - afaik - 您使用 DF/DS 的示例将产生相同的物理计划。因此,从这个意义上说,性能没有差异。如果有一个缓存,那么我们可以看到禁用 - 请参阅How to prevent predicate pushdown?

    现在我注意到(随着时间的推移)有不同的连接器,因此可能会有不同的方法,具体取决于您使用的连接器类型。我们似乎已经从一个需要谓词下推的时期变成了我们一般无法禁用它的时期。

    在任何情况下,您的 5% 数据样本对我来说一般来说是希望谓词下推的标志。

    【讨论】:

      猜你喜欢
      • 2018-03-07
      • 2012-03-07
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多