本文主要介绍如何通过Hive访问Lindorm宽表。

前提条件

注意事项

  • 如果您想要通过公网访问或您的实例类型为Lindorm单节点,在执行本文操作前,需要先升级SDK并更改配置。具体操作,请参见通过HBase Java API连接并使用宽表引擎章节中的步骤1。
  • 如果应用部署在ECS实例,通过专有网络访问Lindorm实例前,需要确保Lindorm实例和ECS实例满足以下条件,以保证网络的连通性。
    • 所在地域相同,并建议所在可用区相同(以减少网络延时)。
    • ECS实例与Lindorm实例属于同一专有网络。

在Hive中配置连接参数

方式一:在hive-site.xml配置文件中添加访问配置。

<configuration>
    <property>
        <name>hbase.zookeeper.quorum</name>
      <!--
   宽表引擎的HBase Java API专有网络连接地址
    -->
        <value>ld-bp1461s38p7y9****-proxy-lindorm.lindorm.rds.aliyuncs.com:30020</value>
    </property>
 </configuration>

方式二:在Hive Client中用命令的方式配置。

// 宽表引擎的HBase Java API专有网络连接地址
set hbase.zookeeper.quorum=ld-bp1461s38p7y9****-proxy-lindorm.lindorm.rds.aliyuncs.com:30020

操作步骤

  1. 在Hive Client中设置需要访问的Lindorm实例的连接地址。
    hive
    // 宽表引擎的HBase Java API专有网络连接地址
    set hbase.zookeeper.quorum=ld-bp1461s38p7y9****-proxy-lindorm.lindorm.rds.aliyuncs.com:30020
  2. 在Lindorm中创建表hive_hbase_table。
    CREATE 'hive_hbase_table','cf1'
  3. 在Hive中创建外表。
    CREATE EXTERNAL TABLE hive_hbase_table(key int, value string)
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
    TBLPROPERTIES ("hbase.table.name" = "hive_hbase_table", "hbase.mapred.output.outputtable" = "hive_hbase_table");

    返回结果显示OK,表示创建成功。

  4. 插入数据并查看是否插入成功。
    • 在Hive中往外表插入数据,并在Lindorm中查看数据是否插入成功。

      插入数据:

      insert into hive_hbase_table values(212,'bab');
      在Lindorm中查看数据是否插入成功:
      scan 'hive_hbase_table'
      返回结果如下:
      ROW                   COLUMN+CELL
      212                   column=cf1:val, timestamp=2023-03-13T15:35:10.270, value=bab                      
    • 在Lindorm中往表hive_hbase_table中插入数据,并在Hive中查看数据是否插入成功。
      插入数据:
      put 'hive_hbase_table','213','cf1:val','dadsadasda'
      在Hive中查看数据是否插入成功。
      SELECT * FROM hive_hbase_table;
      返回结果如下:
      212   bab
      213   dadsadasda
重要 目前暂不支持通过Hive直接读取Lindorm的底层文件,但支持通过关联或创建外表的方式在Lindorm中读写数据。