云原生数据湖分析(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.XX.XX:9000/test/p/d=1 hadoop fs -copyFromLocal example.txt hdfs://172.168.XX.XX:9000/test/p/d=1/example.txt
您需要把命令中
172.168.XX.XX:9000
替换成您HDFS集群的host。
操作步骤
- 登录DLA控制台。
- 单击左侧导航栏的Serverless Presto>SQL执行。
- 单击登录到DMS来执行SQL操作,执行以下SQL命令创建库:
CREATE DATABASE `my_hdfs_db` WITH DBPROPERTIES ( catalog = 'hive', location = 'hdfs://172.168.XX.XX: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.XX.XX: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.XX.XX: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。