hbase组合rowkey_HBase实践 | 使用Spark SQL读写HBase

Apache Spark-Apache HBase Connector(SHC)提供了DataFrame与HBase之间的交互,利用Catalyst引擎优化查询,如分区修剪、列修剪和谓词下推。SHC通过转换Rowkey查询为Get请求提高效率,但面对非Rowkey过滤可能进行全表扫描。此外,SHC支持组合Rowkey查询,但在某些情况未完全优化。对于<或>条件的scan查询,SHC会转换为get和scan操作。SHC仍在改进中,正与HBase官方connectors整合。
摘要由CSDN通过智能技术生成

Apache Spark 和 Apache HBase 是两个使用比较广泛的大数据组件。很多场景需要使用 Spark 分析/查询 HBase 中的数据,而目前 Spark 内置是支持很多数据源的,其中包括 HBase,但是内置的读取数据源还是使用 TableInputFormat 读取 HBase 中的数据。此 TableInputFormat 有一些缺点:

  • 一个 Task 里面只能启动一个 Scan 去 HBase 中读取数据;

  • TableInputFormat 中不支持 BulkGet;

  • 不能享受到 Spark SQL 内置的 Catalyst 引擎的优化。

基于这些问题,来自 Hortonworks 的工程师们为我们带来了全新的 Apache Spark-Apache HBase Connector,下面简称 SHC。通过这个类库,我们可以直接使用 Spark SQL 将 DataFrame 的数据写入到 HBase 中;而且我们也可以使用 Spark SQL 查询 HBase 的数据,在查询 HBase 的时候充分利用 Catalyst 引擎做了许多优化,比如分区修剪(partition pruning),列修剪(column pruning),谓词下推(predicate pushdown)和数据本地性(data locality)等等。因为有了这些优化,通过 Spark 查询 HBase 的速度有了很大的提升。

注意:SHC 同时还提供将 DataFrame 的数据直接写入到 HBase 中,但是整个代码并没有什么优化的地方,所以本文对这部分不进行介绍。感兴趣的读者可以直接到这里查看相关写数据到 HBase 的代码。

SHC 是如何实现查询优化的呢

SHC 主要使用下面的几种优化,使得 Spark 获取 HBase 的数据扫描范围得到减少,提高了数据读取的效率。

将使用 Rowkey 的查询转换成 get 查询

我们都知道,HBase 中使用 Get 查询的效率是非常高的,所以如果查询的过滤条件是针对 RowKey 进行的,那么我们可以将它转换成 Get 查询。为了说明这点,我们使用下面的例子进行说明。假设我们定义好的 HBase catalog 如下:

val catalog = s"""{
    
  |"table":{"namespace":"default", "name":"iteblog", "tableCoder":"PrimitiveType"},
  |"rowkey":"key",
  |"columns":{
    |"col0":{"cf":"rowkey", "col":"id", "type":"int"},
    |"col1":{"cf":"cf1", "col":"col1", "type":"boolean"},
    |"col2":{"cf":"cf2", "col":"col2", "type":"double"},
    |"col3":{"cf":"cf3", "col":"col3"
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值