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

简介: 最近,DLA SQL发布了CU版,支持访问用户自建的HDFS,使得挖掘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生态庞大的周边软件设施,方便了用户,降低用户在这些周边软件上的投入。
image.png

高可用

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

开箱即用

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


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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
6月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
简介:本文整理自阿里云高级技术专家李麟在Flink Forward Asia 2025新加坡站的分享,介绍了Flink 2.1 SQL在实时数据处理与AI融合方面的关键进展,包括AI函数集成、Join优化及未来发展方向,助力构建高效实时AI管道。
967 43
|
6月前
|
SQL 人工智能 JSON
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
本文整理自阿里云的高级技术专家、Apache Flink PMC 成员李麟老师在 Flink Forward Asia 2025 新加坡[1]站 —— 实时 AI 专场中的分享。将带来关于 Flink 2.1 版本中 SQL 在实时数据处理和 AI 方面进展的话题。
419 0
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
|
7月前
|
SQL
SQL如何只让特定列中只显示一行数据
SQL如何只让特定列中只显示一行数据
|
11月前
|
SQL 自然语言处理 数据库
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。
293 4
|
7月前
|
SQL
SQL中如何删除指定查询出来的数据
SQL中如何删除指定查询出来的数据
|
7月前
|
SQL 关系型数据库 MySQL
SQL如何对不同表的数据进行更新
本文介绍了如何将表A的Col1数据更新到表B的Col1中,分别提供了Microsoft SQL和MySQL的实现方法,并探讨了多表合并后更新的优化方式,如使用MERGE语句提升效率。适用于数据库数据同步与批量更新场景。
|
9月前
|
SQL 数据挖掘 关系型数据库
【SQL 周周练】一千条数据需要做一天,怎么用 SQL 处理电表数据(如何动态构造自然月)
题目来自于某位发帖人在某 Excel 论坛的求助,他需要将电表缴费数据按照缴费区间拆开后再按月份汇总。当时用手工处理数据,自称一千条数据就需要处理一天。我将这个问题转化为 SQL 题目。
319 12
|
8月前
|
SQL DataWorks 数据管理
SQL血缘分析实战!数据人必会的3大救命场景
1. 开源工具:Apache Atlas(元数据管理)、Spline(血缘追踪) 2. 企业级方案:阿里DataWorks血缘分析、腾讯云CDW血缘引擎 3. 自研技巧:在ETL脚本中植入版本水印,用注释记录业务逻辑变更 📌 重点总结:
|
9月前
|
SQL 数据采集 资源调度
【SQL 周周练】爬取短视频发现数据缺失,如何用 SQL 填充
爬虫爬取抖音和快手的短视频数据时,如果遇到数据缺失的情况,如何使用 SQL 语句完成数据的补全。
283 5
|
11月前
|
SQL 容灾 关系型数据库
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
SQL Server 以其卓越的易用性和丰富的软件生态系统,在数据库行业中占据了显著的市场份额。作为一款商业数据库,外部厂商在通过解析原生日志实现增量数据捕获上面临很大的挑战,DTS 在 SQL Sever 数据通道上深研多年,提供了多种模式以实现 SQL Server 增量数据捕获。用户可以通过 DTS 数据传输服务,一键打破自建 SQL Server、RDS SQL Server、Azure、AWS等他云 SQL Server 数据孤岛,实现 SQL Server 数据源的流动。
697 0
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍