云原生数据湖分析(Data Lake Analytics,DLA)支持通过CU版访问用户自建的HDFS。本文主要介绍如何通过DLA连接并查询HDFS上的数据。
前提条件
- DLA目前仅支持通过CU版访问HDFS,请确保您已经开通了DLA CU版本,详情请参见CU版本快速入门。
- 创建虚拟集群时,绑定的数据源网络必须和HDFS集群在同一个VPC下面。
- 以下示例是一个简单的CSV文件,您可以在本地创建一个新的文本文件
example.txt
,在其中粘贴如下内容:7,8,9
然后执行如下命令将文件上传到HDFS。
hadoop fs -mkdir -p hdfs://172.168.199.0:9000/test/p/d=1
hadoop fs -copyFromLocal example.txt hdfs://172.168.199.0:9000/test/p/d=1/example.txt
您需要把命令中
172.168.199.0:9000
替换成您HDFS集群的host。
说明 目前不支持访问开启了Kerberos认证的集群。如果您的集群开启了Kerberos认证,可以提交工单或者钉钉咨询 DLA答疑获得支持。
操作步骤
- 登录DLA控制台。
- 单击左侧导航栏的Serverless Presto>SQL执行。
- 单击登录到DMS来执行SQL操作,执行以下SQL命令创建库:
CREATE DATABASE `my_hdfs_db`
WITH DBPROPERTIES (
catalog = 'hive',
location = 'hdfs://172.168.199.0:9000/test/'
)
说明 您也可以通过MySQL客户端或者程序代码等方式链接DLA,然后执行SQL命令创建库。
参数说明如下:
- CATALOG:取值为hive,表示创建的是hive Schema。
- LOCATION:库所在的目录。
- 创建表。
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://172.168.199.0:9000/test/p/';
说明 HDFS表的参数、表属性和OSS表大部分都是一样的。主要的区别如下:
- 由于网络连通性的问题,在创建库、表时不会对目录内容进行检查,用户需要自己保证目录的正确性。
- 基于同样的原因,HDFS表不支持auto.create.location属性。
- 查询或访问数据。
由于只有CU的计算资源和HDFS网络可以联通,因此所有访问HDFS表的SQL语句都需要指定
hint: /*+cluster=your-vc-name*/
,这样SQL就会在CU中执行。
示例:
mysql> /*+ cluster=vc-test */
-> alter table p
-> add partition (d=1)
-> location 'hdfs://172.168.0.6:9000/test/p/d=1';
Query OK, 0 rows affected (8.63 sec)
mysql> /*+ cluster=vc-test */
-> alter table p
-> drop partition (d=1) ;
Query OK, 0 rows affected (6.08 sec)
mysql> /*+ cluster=vc-test */ msck repair table p;
+-----------+-----------+
| Partition | Operation |
+-----------+-----------+
| d=1 | CREATED |
+-----------+-----------+
1 row in set (16.47 sec)
mysql> /*+ cluster=vc-test */ select * from p;
+------+------+------+------+
| a | b | c | d |
+------+------+------+------+
| 7 | 8 | 9 | 1 |
+------+------+------+------+
1 row in set (4.74 sec)
更多详细信息,请参见常用SQL。