hbase-spark 连接器是否可用于按某些性能良好的列对 hbase 行进行排序?

Can hbase-spark connector be used for sorting hbase rows by some column with good performance?

好吧,问题的标题说明了一切。我有一个要求,需要获取与特定列中前 X(比如前 10)值对应的行键。因此,我需要按所需的列值对 hbase 行进行排序。我不明白我应该怎么做,甚至不知道是否可行。看来hbase并没有很好地迎合这一点。它也不允许开箱即用的任何此类功能。

Q1. 我可以使用hbase-spark connector,将整个hbase数据加载到spark rdd中,然后在其中进行排序吗?这个会很快吗?连接器和火花将如何处理它?它会在单个节点或多个节点上获取整个数据并以分布式方式排序吗?

Q2.请问还有什么更好的办法吗?

Q3. 在 hbase 中完全无法撤销吗?我应该完全选择不同的 framework/technology 吗?

A3. 如果您需要按某些列(而不是行键)对数据进行排序,则使用 HBase 不会给您带来任何好处。它与从 hive/hdfs 读取原始文件并排序相同,但速度较慢。

A1. 当然,您可以为此使用 SHC 或任何其他 spark-hbase 库,但 A3 仍然有效。它会将整个数据作为 Spark RDD 加载到每个区域服务器上,只是为了在整个集群中随机播放它。

A2. 与任何其他 programming/architecture 问题一样,根据您的资源和要求,有许多可能的解决方案。


Will spark load all the data on single node and do sorting on single node or will it perform sorting on different nodes?

这取决于两个因素:

  • 你的 table 有多少个区域:这决定了从你的 table 读取的并行度(分区数)。
  • spark.sql.shuffle.partitions配置值:从table加载数据后,该值决定了排序阶段的并行度。

is there any better [library] than the SHC?

目前Spark与HBase集成的库有很多,各有优缺点,其中TMOnone已经完全成熟或覆盖全面(相比Spark-Hive集成,对于例子)。要从 Spark over HBase 中获得最佳效果,您应该非常了解您的用例和 select 最合适的 table 库。

Q2。还有没有更好的方法来做到这一点?

如果重新设计 HBase table 是一个选项,将此特定列值作为 rowkey 的一部分,这将允许快速访问这些值,因为 HBase 针对行键过滤器进行了优化,并且不是列过滤器。

然后您可以创建 existing_rowkey + this_col_value 的行键串联。然后使用行过滤器查询它会有更好的性能结果。