问题的标题就是这么说的。我有一个要求,要求获得对应于某列中前X(比如前10)值的行键。因此,我需要按所需的列值对hbase行进行排序。我不明白我该怎么做,甚至不可行。似乎hbase不能很好地迎合这一点。此外,它不允许任何此类功能开箱即用。
Q1。我可以使用hbase-spark connector,在spark rdd中加载整个hbase数据,然后在其中执行排序吗?这会很快吗?连接器和火花如何处理?它会在单个节点还是多个节点上获取整个数据并以分布式方式排序?
Q2。还有更好的方法吗?
Q3。在hbase中它是否可以撤消?我应该选择不同的框架/技术吗?
答案 0 :(得分:2)
A3。如果您需要按某些列(而不是行键)对数据进行排序,则使用HBase无法获益。它与从hive / hdfs读取原始文件和排序相同,但速度较慢。
A1。当然,您可以使用SHC或任何其他spark-hbase库,但 A3 仍然有效。它将把每个区域服务器上的整个数据作为Spark RDD加载,只是为了在整个集群中进行混洗。
A2。与任何其他编程/体系结构问题一样,根据您的资源和要求,有许多可能的解决方案。
spark会加载单个节点上的所有数据并在单个节点上进行排序还是会在不同的节点上执行排序?
这取决于两个因素:
spark.sql.shuffle.partitions
配置值:从表中加载数据后,此值确定排序阶段的并行度。有没有比SHC更好的[库]?
至于今天有多个用于将Spark与HBase集成的库,每个库都有自己的优点和缺点,而且TMO都没有完全成熟或完全覆盖(例如,比较Spark-Hive集成)。要从Spark over HBase中获得最佳效果,您应该非常了解您的用例并选择最合适的库。
答案 1 :(得分:0)
Q2。还有更好的方法吗?
如果重新设计HBase表是将此特定列值作为rowkey
的一部分的选项,则可以快速访问这些值,因为HBase针对rowkey过滤器而不是列过滤器进行了优化。
然后,您可以创建existing_rowkey + this_col_value
的rowkey连接。然后使用行过滤器查询它将获得更好的性能结果。