使用DLA访问

本文介绍通过数据湖分析(DLA)连接LindormDFS的方法,并使用SQL查询LindormDFS中的数据。

前提条件

  • 云原生多模数据库 Lindorm实例已开通LindormDFS,具体请参见开通指南

  • 将专有网络的IP添加至Lindorm实例的白名单中,具体请参见设置白名单

  • 已开通DLA Serverless SQL CU版本,具体请参见DLA Presto CU版本快速入门

    说明

    配置DLA虚拟集群的数据源网络时,数据源网络和Lindorm实例使用相同的专有网络ID。

访问方式

数据湖分析(Data Lake Analytics,简称DLA)支持通过DLA Serverless SQL和DLA Serverless Spark方式访问LindormDFS。

  • 通过DLA Serverless Spark方式访问LindormDFS,具体请参见Hadoop

  • 通过DLA Serverless SQL方式访问LindormDFS的具体步骤,请参见操作步骤

    说明

    DLA Serverless SQL仅支持通过CU版本访问LindormDFS。

准备工作

  1. 在本地创建新的文本文件example.txt,文本内容示例如下:

    7,8,9
  2. 执行如下命令将文本文件上传至LindormDFS。

    hadoop fs -mkdir -p hdfs://${实例ID}-master1-001.lindorm.rds.aliyuncs.com:8020/test/p/d=1
    hadoop fs -copyFromLocal example.txt hdfs://${实例ID}-master1-001.lindorm.rds.aliyuncs.com:8020/test/p/d=1/example.txt
    说明

    由于DLA Serverless SQL访问不支持高可用方式,所以通过该方式访问LindormDFS时,需要将上面的地址替换成LindormDFS主名称节点的host,主备节点可以在hdfs-site配置中查看,查看方法请参见访问配置生成

  3. 执行如下命令查看数据是否上传成功。

    hadoop fs -ls hdfs://${实例ID}-master1-001.lindorm.rds.aliyuncs.com:8020/test/p/d=1

    执行结果如下图表示上传成功。

    执行结果

操作步骤

  1. 登录DLA控制台

  2. 在左侧导航栏,选择Serverless Presto>SQL执行

  3. 在编辑框中输入以下SQL命令,并单击编辑框上方的同步执行

    CREATE DATABASE `my_lindorm_store_db`
    WITH DBPROPERTIES (
        catalog = 'hive',
        location = 'hdfs://${实例ID}-master1-001.lindorm.rds.aliyuncs.com:8020/test/'
    )
    说明

    您也可以通过MySQL客户端或者程序代码等方式连接DLA,然后执行SQL命令创建库。创建库语句的参数说明如下:

    • CATALOG:取值为hive,表示创建的是hive Schema。

    • LOCATION:库所在的目录。

  4. 执行以下创建表的命令。

    USE `my_lindorm_store_db`;
    CREATE EXTERNAL TABLE p (
        `a` int,
        `b` int,
        `c` int
    ) partitioned by (d int)
    ROW FORMAT DELIMITED
        FIELDS TERMINATED BY ','
    STORED AS `TEXTFILE`
    LOCATION 'hdfs://${实例ID}-master1-001.lindorm.rds.aliyuncs.com:8020/test/p/';
    说明

    LindormDFS表的参数、表属性和OSS表大部分都是一样的。主要的区别如下:

    • 由于网络连通性的问题,在创建库、表时不会对目录内容进行检查,用户需要自己保证目录的正确性。

    • 基于同样的原因,LindormDFS表不支持auto.create.location属性。

  5. 查询数据。由于只有CU的计算资源与LindormDFS网络可以连通,因此所有访问LindormDFS表的SQL语句都需要指定hint: /*+pool-selector=your-vc-name*/ ,指定后SQL语句会在CU中执行。

     /*+ pool-selector=test-vc */
    alter table p
    add partition (d=1)
    location 'hdfs://${实例ID}-master1-001.lindorm.rds.aliyuncs.com:8020/test/p/d=1';
    Query OK, 0 rows affected (8.63 sec)
    
    /*+ pool-selector=test-vc */ select * from  p;
    +------+------+------+------+
    | a    | b    | c    | d    |
    +------+------+------+------+
    |    7 |    8 |    9 |    1 |
    +------+------+------+------+
    1 row in set (4.74 sec)

    执行结果如下图:

    执行结果

    说明

    DLA中常用的SQL类型和语法,更多请参见常用SQL