背景介紹
阿里雲數據湖分析(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