背景介绍
阿里云数据湖分析(DLA)产品提供一站式的数据湖分析与计算服务,支持 ETL、机器学习、流、交互式分析,可以与OSS、数据库等多种数据源搭配使用,帮助用户构建统一、安全、高效、开放的数据湖解决方案。DLA SQL引擎基于Presto实现,可以实现高效的在线分析,主要面向用户探索式分析、报表以及轻量ETL的场景,支持OSS、RDS、AnalyticsDB、MaxCompute、TableStore、ElasticSearch等多种数据源。
针对云上OSS存储价格低廉、容量可以无限扩展的优点,我们围绕OSS上的数据做了很多优化和实用的功能,用户可将在线数据和实时增量数据同步到OSS中,然后对数据做深度的计算和分析;还可以使用元数据爬取的功能,自动为OSS上面的数据文件创建及更新数据湖元数据,方便分析和计算。
我们也注意到,有不少用户的数据是存放在HDFS上面的。作为最流行的开源分布式文件系统,HDFS具有高度容错性、高吞吐量、高可靠、可水平扩展等优点,适用于海量数据的存储,一直是许多分布式系统的底座,拥有完整的生态支持。然而,受限于DLA SQL的网络架构,在过去我们一直没有提供HDFS的支持。最近,DLA SQL发布了CU版,支持访问用户自建的HDFS,使得挖掘HDFS上面数据的价值成为可能。
操作步骤
我们以一个csv文件的简单查询为例。
1. 准备数据文件。
可以在本地创建一个新的文本文件example.txt,在其中粘贴如下内容:
7,8,9
然后执行如下命令将文件上传到HDFS(需要把172.16.199.0:9000替换成你的HDFS集群的host,下同):
hadoop fs -mkdir -p hdfs://172.16.199.0:9000/test/p/d=1
hadoop fs -copyFromLocal example.txt hdfs://172.16.199.0:9000/test/p/d=1/example.txt
2. 开通DLA SQL CU版
3. 绑定数据源网络。注意这里绑定的数据源网络和HDFS要在同一个vpc下面,确保网络可以联通。
4. 连接DLA,创建库:
CREATE DATABASE `my_hdfs_db`
WITH DBPROPERTIES (
catalog = 'hive',
location = 'hdfs://172.16.199.0:9000/test/'
)
这里location指定为库所在的目录。需要注意的是由于元数据系统和用户网络不能连通,DLA在建库/表时不会对目录做任何检查,所以需要用户自己保证这里指定的是一个可以从HDFS集群外部访问的正确路径。
关于建库语句的更多说明参见DLA SQL语法说明: https://help.aliyun.com/document_detail/72005.html?spm=a2c4g.11174283.6.587.4e37b1bfbH0xzX
5. 建表:
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.16.199.0:9000/test/p/';
关于建表语句的更多描述参见DLA SQL语法说明:https://help.aliyun.com/document_detail/72006.html?spm=a2c4g.11186623.6.588.6388464dB88boC 。 注意HDFS表不支持auto.create.location属性。
6. 查询数据:
mysql> /*+ pool-selector=vc-test */ msck repair table p;
+-----------+-----------+
| Partition | Operation |
+-----------+-----------+
| d=1 | CREATED |
+-----------+-----------+
1 row in set (16.47 sec)
mysql> /*+ pool-selector=vc-test */ select * from p;
+------+------+------+------+
| a | b | c | d |
+------+------+------+------+
| 7 | 8 | 9 | 1 |
+------+------+------+------+
1 row in set (4.74 sec)
更多信息可参考DLA帮助文档。
使用DLA SQL分析HDFS数据的优势
对比通过自建Presto/Hive来分析HDFS上的数据,使用DLA SQL具有如下优势:
- MySQL生态支持
- 高可用
- 开箱即用
MySQL生态的支持
使用自建的Presto/Hive,在选择外围客户端软件/BI软件/调度软件时,要考虑这些软件对Presto/Hive的支持,可选择的范围通常会有很大的限制。而DLA SQL兼容MySQL协议,可以使用MySQL生态庞大的周边软件设施,方便了用户,降低用户在这些周边软件上的投入。
高可用
在开源的Presto架构中Presto Coordinator是个单点,如果因为CPU/内存或者底层物理机的原因导致Coordinator不可用,会导致整个集群不可用,从而影响用户的使用,DLA SQL内置了多Coordinator HA,当一个Coordinator宕机,另外一个Coordinator会自动接管,保证整个集群的可用性:
开箱即用
DLA SQL通过在页面点击开通即可使用,CU版集群可以在一两分钟内创建好。然后进行数据查询,直接在DLA控制台就可以查询,或者任何支持MySQL协议的客户端都可以查询;最后因为DLA SQL支持了MySQL协议,云上有现成的BI服务: QuickBI,有现成的调度服务阿里云DMS, 阿里云DataWorks等等,因此BI报表展示以及任务的定时调度均可以在5分钟内完成;整个过程可以在30分钟内完成,真正做到开箱即用。
关于DLA SQL的更多介绍参见 https://developer.aliyun.com/article/770819