云原生数据湖分析(Data Lake Analytics,DLA)支持通过CU版访问用户自建的HiveMetastore。本文主要介绍如何通过DLA连接并查询HiveMetastore里存储在HDFS的数据。

前提条件

  • DLA目前仅支持通过CU版访问HiveMetastore,请确保您已经开通了DLA CU版本,具体请参见DLA Presto CU版本快速入门
    说明
    • 创建虚拟集群时,绑定的数据源网络必须和HiveMetastore+HDFS集群在同一个VPC下面。
    • 目前不支持访问开启了Kerberos认证的集群。如果您的集群开启了Kerberos认证,可以提交工单获取支持。
  • 在HiveMetastore中已创建数据库和表,并插入数据。参考命令样例如下:
    CREATE DATABASE testDb;
    
    CREATE EXTERNAL TABLE if not exists testDb.testTable(
                    id int,
                    name string);
    
    insert into testDb.testTable(id, name) values (1, "jack");

操作步骤

  1. 登录DLA控制台
  2. 在左侧导航栏的Serverless Presto>SQL执行,单击登录DMS执行SQL,执行以下SQL命令创建数据库和创建表。
    说明 您也可以通过MySQL客户端或者程序代码等方式连接DLA,然后执行SQL命令创建库。
    1. 创建数据库。
      CREATE DATABASE `dlaDb`
      WITH DBPROPERTIES (
          catalog = 'customer_hive',
          database = 'testDb',
          location = '172.16.199.34:9083',
          vpc_id = 'xxx',
          hdfs_properties = 'fs.defaultFS=hdfs://172.16.199.41:9000'
      )
      参数名称 参数说明
      catalog 表示创建的数据源是用户的HiveMetastore数据,固定为customer_hive。
      database 指定需要访问的数据库为用户HiveMetastore的HiveServer中的库名。
      location 指定需要访问的连接点为用户HiveMetastore的HiveServer地址。
      vpc_id 指定需要访问的HiveMetastore所在的vpc。
      hdfs_properties 指定需要访问的HiveMetastore中默认的hdfs配置。包括以下两种形式:
      • 非HA的HDFS,示例如下:
        //这里的hdfs的配置为自建HDFS的地址,需要指定为IP或域名,不能为hostname。
        hdfs_properties='fs.defaultFS=hdfs://172.16.199.41:9000'
      • HA的HDFS,,示例如下:
        //这里的hdfs的配置为自建HA HDFS的配置,需要指定为IP或域名,不能为hostname。
        hdfs_properties='fs.defaultFS=hdfs://emr-cluster;dfs.nameservices=emr-cluster;dfs.client.failover.proxy.provider.emr-cluster=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider;dfs.ha.namenodes.emr-cluster=nn1,nn2;dfs.nameservice.id=emr-cluster;dfs.namenode.rpc-address.emr-cluster.nn1=172.16.199.34:8020;dfs.namenode.rpc-address.emr-cluster.nn2=172.16.199.35:8020'
    2. 创建表。
      • 通过create table来创建表。
        CREATE EXTERNAL TABLE if not exists dlaDb.testTable(
                        id int,
                        name string);
        说明 表名 testTable需要和HiveMetastore中对应db的表名相同。
      • 通过msck来创建表。
        msck repair database dlaDb;
  3. 查询或访问数据。
    由于只有CU的计算资源和HiveMetastore网络可以联通,因此所有访问HiveMetastore表的SQL语句都需要指定 hint: /*+cluster=your-vc-name*/ ,这样SQL才会在CU中执行。
    查询数据示例如下:
    mysql> /*+ cluster=vc-test */ select * from  dlaDb.testTable;
    +------+------+
    | id   | name |
    +------+------+
    |    1 | jack |
    +------+------+
    1 row in set (1.74 sec)