本文介绍如何使用E-MapReduce(简称EMR)上的Hive关联阿里云HBase的表。阿里云HBase需要借助外部Hive对多表进行关联分析。

前提条件

  • 已创建EMR的Hadoop集群,并且选择了HBase和Zookeeper服务。详情请参见创建集群
  • 创建与EMR同一地域下相同VPC的HBase示例。
    说明 本文示例为标准版HBase。

步骤一:修改Hive配置

  1. 通过SSH方式连接集群。
    详情请参见使用SSH连接主节点
  2. 修改Hive配置。
    1. 执行如下命令,进入Hive配置目录。
      cd /etc/ecm/hive-conf/
    2. 执行如下命令,修改hbase-site.xml
      vim hbase-site.xml
    3. 修改hbase.zookeeper.quorum的值为云HBase的Zookeeper访问连接。
      示例如下:
      <property>
                 <name>hbase.zookeeper.quorum</name>
                 <value>hb-bp11jooxvvnca****-master2-001.hbase.rds.aliyuncs.com:2181,hb-bp11jooxvvnca****-master3-001.hbase.rds.aliyuncs.com:2181,hb-bp11jooxvvnca****-master1-001.hbase.rds.aliyuncs.com:2181</value>
      </property>

步骤二:查看HBase表

  1. 执行如下命令,连接HBase。
    hbase shell
  2. 执行list命令,查看HBase表hive_hbase_table是否存在。

步骤三:创建HBase外部关联表

  1. 在HBase上执行如下命令创建外部表。
    create 'hbase_table','f'
  2. 向表中插入数据。
    1. 插入第一条数据。
      put 'hbase_table','1122','f:col1','hello'
    2. 插入第二条数据。
      put 'hbase_table','1122','f:col2','hbase'
  3. 创建HBase外部关联表并查看数据。
    1. 执行如下命令,在Hive中创建HBase外部关联表。
      create external table hbase_table(key int,col1 string,col2 string)
      STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
      WITH SERDEPROPERTIES ("hbase.columns.mapping" = "f:col1,f:col2")
      TBLPROPERTIES ("hbase.table.name" = "hbase_table", "hbase.mapred.output.outputtable" = "hbase_table");
    2. 查看关联表信息。
      select * from hbase_table;
      返回表信息如下:
      1122    hello   hbase
    3. 在Hive中删除表hbase_table
      drop table hbase_table;
    4. 在HBase中执行list命令,查看表hbase_table是否存在。
      返回信息显示表hbase_table存在,表明删除Hive中的表并不影响HBase中已存在的表。

步骤四:创建云HBase表

  1. 输入hive命令进入Hive CLI命令行。
  2. 执行以下命令,创建HBase表。
    CREATE 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");
  3. hive_hbase_table表中插入数据。
    insert into hive_hbase_table values(212,'bab');
  4. 在Hive中查看表信息。
    select * from hive_hbase_table;

    HBase表已创建,数据也已经写入。

  5. 在HBase中写入数据并在Hive中查看。
    1. 在HBase中写入数据。
      put 'hive_hbase_table','132','cf1:val','acb'
    2. 在Hive中查看写入的数据。
      select * from hive_hbase_table;
      返回信息如下:
      132    acb
      212    bab
  6. 删除Hive表,查看HBase表情况。
    1. 在Hive中删除表hive_hbase_table
      drop table hive_hbase_table;
    2. 在HBase中查看表hive_hbase_table
      scan hive_hbase_table;

      提示表已经不存在。