谁执行 HBase 过滤器?

Who executes HBase filters?

哪台机器执行org.apache.hadoop.hbase.filter.Filter

根据documentation,当使用 Get 或 Scan 操作从 HBase 读取数据时,您可以使用自定义过滤器将结果的子集 return 发送给客户端。虽然这不会减少服务器端的 IO,但它确实会减少网络带宽并减少客户端需要处理的数据量。

据我所见,spark 执行器机器正在 hbase 客户端的后台线程中进行远程调用以查询 HBase 数据。而且这些调用很少是针对本地机器的 hbase 区域服务器的。

所以我想知道我的自定义过滤器是否在 Spark 执行器机器上执行,具有巨大的网络开销,与文档保证的内容相矛盾,或者它以某种方式通过网络传输并在 HBase 机器上执行?
我怀疑 Filter 不是可序列化的。那么下一个问题是是否可以在这里优化任何东西?

过滤器在区域服务器进程中执行。如果将带有代码的 jar 文件放入 HBase 配置中参数 hbase.dynamic.jars.dir 指定的目录,HBase 可以动态加载它。 Filter 接口没有实现 Serializable 接口,但是它有方法

static Filter    parseFrom(byte[] pbBytes)

从序列化表单创建过滤器。在应该用于自定义过滤器创建的 class FilterBase 中存在方法

abstract byte[] toByteArray()

用于将过滤器序列化为字节数组。