使用DLA SQL(兼容Presto) CU版分析HDFS数据

背景介绍

阿里云数据湖分析(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生态庞大的周边软件设施,方便了用户,降低用户在这些周边软件上的投入。
使用DLA SQL(兼容Presto) CU版分析HDFS数据

高可用

在开源的Presto架构中Presto Coordinator是个单点,如果因为CPU/内存或者底层物理机的原因导致Coordinator不可用,会导致整个集群不可用,从而影响用户的使用,DLA SQL内置了多Coordinator HA,当一个Coordinator宕机,另外一个Coordinator会自动接管,保证整个集群的可用性:
使用DLA SQL(兼容Presto) CU版分析HDFS数据

开箱即用

DLA SQL通过在页面点击开通即可使用,CU版集群可以在一两分钟内创建好。然后进行数据查询,直接在DLA控制台就可以查询,或者任何支持MySQL协议的客户端都可以查询;最后因为DLA SQL支持了MySQL协议,云上有现成的BI服务: QuickBI,有现成的调度服务阿里云DMS, 阿里云DataWorks等等,因此BI报表展示以及任务的定时调度均可以在5分钟内完成;整个过程可以在30分钟内完成,真正做到开箱即用。


关于DLA SQL的更多介绍参见 https://developer.aliyun.com/article/770819

上一篇:爆料:DLA SQL新体验,新数据源,还有一元购(内含福利)


下一篇:PrestoCon 2020: 云原生数据湖分析DLA的Presto实践