作者:美的樓宇科技事業(yè)部 先行研究中心智能技術(shù)部
美的樓宇科技 IoT 數(shù)據(jù)平臺(tái)建設(shè)背景
美的樓宇科技事業(yè)部(以下簡(jiǎn)稱(chēng)樓宇科技)是美的集團(tuán)旗下五大板塊之一,產(chǎn)品覆蓋多聯(lián)機(jī)組、大型冷水機(jī)組、單元機(jī)、機(jī)房空調(diào)、扶梯、直梯、貨梯以及樓宇自控軟件和建筑弱電集成解決方案,遠(yuǎn)銷(xiāo)海內(nèi)外200多個(gè)國(guó)家。針對(duì)當(dāng)前設(shè)備數(shù)據(jù)量龐大且持續(xù)增長(zhǎng)、數(shù)據(jù)呈現(xiàn)半結(jié)構(gòu)化特點(diǎn)的現(xiàn)狀,現(xiàn)有系統(tǒng)僅停留在數(shù)據(jù)存儲(chǔ)和基礎(chǔ)使用層面,缺乏深度挖掘數(shù)據(jù)價(jià)值的能力,導(dǎo)致大量潛在信息未被充分利用。因此,迫切需要構(gòu)建一個(gè)統(tǒng)一且通用的 IoT 數(shù)據(jù)平臺(tái),平臺(tái)不僅要具備高度的彈性和輕量化特性,還應(yīng)具備強(qiáng)大的大規(guī)模數(shù)據(jù)處理能力以及數(shù)據(jù)科學(xué)和 AI 技術(shù)支持,以實(shí)現(xiàn)快速的數(shù)據(jù)分析與智能化挖掘,推動(dòng)樓宇系統(tǒng)的智能化升級(jí),支持節(jié)能、設(shè)備管理和運(yùn)維等方面的精確決策。我們的 IoT 數(shù)據(jù)平臺(tái)建設(shè)基于阿里云 EMR Serverless Spark ,我們將就IoT數(shù)據(jù)平臺(tái)建設(shè)技術(shù)選型上的一些思考,以及 Spark 技術(shù)棧尤其是場(chǎng)景應(yīng)用實(shí)踐做一下分享。
Lakehouse 架構(gòu)
樓宇科技通過(guò)阿里云EMR Serverless Spark,實(shí)現(xiàn)了數(shù)據(jù)與 AI技術(shù)的有效融合,并結(jié)合EMR Serverless StarRocks搭建了Lakehouse 平臺(tái)。該平臺(tái)核心部分如下:
首先,上游設(shè)備或傳感器數(shù)據(jù)通過(guò)Serverless Spark提交Streaming作業(yè),實(shí)時(shí)以Apache Hudi格式寫(xiě)入數(shù)據(jù)湖,湖表元數(shù)據(jù)同步至DLF,以保持?jǐn)?shù)據(jù)的實(shí)時(shí)性。
接著,采用天級(jí)調(diào)度執(zhí)行Hudi分區(qū)數(shù)據(jù)的Compaction,并使用 Z-order 來(lái)優(yōu)化數(shù)據(jù)布局,實(shí)現(xiàn)了10倍以上的查詢(xún)加速。同時(shí),DLF的鎖機(jī)制確保了實(shí)時(shí)寫(xiě)入與異步湖表任務(wù)的并發(fā)事務(wù)管理,為作業(yè)穩(wěn)定性、數(shù)據(jù)一致性提供了保障。
此外,還通過(guò) Serverless Spark構(gòu)建了數(shù)據(jù)Medallion架構(gòu),從加載的源始數(shù)據(jù)開(kāi)始(Bronze),經(jīng)過(guò)清洗轉(zhuǎn)化為明細(xì)數(shù)據(jù)(Silver),然后根據(jù)不同業(yè)務(wù)需求將明細(xì)層數(shù)據(jù)轉(zhuǎn)化為高質(zhì)量的指標(biāo)數(shù)據(jù)(Gold),為上層業(yè)務(wù)系統(tǒng)提供支持。
在AI應(yīng)用方面,樓宇科技通過(guò)Serverless Spark PySpark 任務(wù),并基于PyArrow UDF調(diào)用自研算法實(shí)現(xiàn)了千億級(jí)別數(shù)據(jù)在百萬(wàn)級(jí)維度的聚合,推動(dòng)了Data + AI技術(shù)在實(shí)際業(yè)務(wù)中的應(yīng)用。最后,處理后的指標(biāo)數(shù)據(jù)從數(shù)據(jù)湖中被加載到StarRocks中,為上層應(yīng)用提供Dashboard和報(bào)表支持,提升了數(shù)據(jù)的可視化和決策能力。
以下架構(gòu)圖展示了如何利用Serverless Spark結(jié)合開(kāi)源湖格式Hudi、ML/AI的多種工具庫(kù),以及阿里云 DLF 統(tǒng)一湖倉(cāng)管理平臺(tái),實(shí)現(xiàn)高效的數(shù)據(jù)處理和AI賦能,使用Serverless StarRocks實(shí)現(xiàn)極速數(shù)據(jù)分析,為業(yè)務(wù)應(yīng)用帶來(lái)顯著的提升。
選擇 Spark 技術(shù)棧
在數(shù)據(jù)平臺(tái)計(jì)算引擎層技術(shù)選型上,前期的架構(gòu)選型我們做了很多的調(diào)研,綜合各個(gè)方面考慮,希望選擇一個(gè)成熟且統(tǒng)一的平臺(tái):既能夠支持?jǐn)?shù)據(jù)處理、數(shù)據(jù)分析場(chǎng)景,也能夠很好地支撐數(shù)據(jù)科學(xué)場(chǎng)景。加上團(tuán)隊(duì)成員對(duì) Python 及 Spark 的經(jīng)驗(yàn)豐富,所以,從一開(kāi)始就將目標(biāo)鎖定到了 Spark 技術(shù)棧。
為什么選擇阿里云EMR Serverless Spark
EMR Serverless Spark 解決了我們什么痛點(diǎn)
1. 自建集群 POC 測(cè)試需要花費(fèi)大量的成本,周期也比較長(zhǎng);
2.針對(duì)千億級(jí)別的IOT設(shè)備上報(bào)數(shù)據(jù),引擎性能非常關(guān)鍵。對(duì)原始數(shù)據(jù)做一輪點(diǎn)位提取(t+1處理),用于后續(xù)數(shù)據(jù)開(kāi)發(fā)和分析,每日的點(diǎn)位提取需要在短時(shí)間內(nèi)運(yùn)行大量資源對(duì)湖原始數(shù)據(jù)進(jìn)行查詢(xún)和處理;
3. 需要完善的Spark 生態(tài),來(lái)實(shí)現(xiàn)全鏈路數(shù)據(jù)流轉(zhuǎn),來(lái)滿足批、流、交互式、機(jī)器學(xué)習(xí)等不同場(chǎng)景需求;
4. 彈性計(jì)算能力,需要一次性支持大規(guī)模計(jì)算,縮短數(shù)據(jù)使用延遲。多聯(lián)機(jī)能耗運(yùn)行月度報(bào)告生成的過(guò)程中,每月5號(hào)之前需要大量資源去生成上月的月度報(bào)告指標(biāo);
5. Data+AI場(chǎng)景的支持能力。
成本相比過(guò)去架構(gòu)提升
1. 不同場(chǎng)景下的整體性能提升50%以上
2. 綜合成本下降30%左右
IoT 數(shù)據(jù)鏈條
我們接入的 IoT 數(shù)據(jù)分為兩部分,歷史存量數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)。目前,歷史存量數(shù)據(jù)是通過(guò) Spark SQL 以天為單位從不同客戶關(guān)系數(shù)據(jù)庫(kù)批量導(dǎo)入 Hudi Lake 表中;實(shí)時(shí)數(shù)據(jù)通過(guò) IoT 平臺(tái)采集到云 Kafka ,經(jīng)由 Spark Structured Streaming 消費(fèi)后實(shí)時(shí)寫(xiě)入到 Hudi Lake 表中。在這個(gè)過(guò)程中,我們將實(shí)時(shí)數(shù)據(jù)和歷史數(shù)據(jù)都 sink 到同一張 Hudi 表里,這種批流一體操作可大大簡(jiǎn)化我們的 ETL 流程(參考后面的案例部分)。數(shù)據(jù)管道下游,我們對(duì)接數(shù)據(jù)分析及數(shù)據(jù)科學(xué)工作流。
IoT 數(shù)據(jù)采集:從 Little Data 到 Big Data
作為 IoT 場(chǎng)景的典型應(yīng)用,美的暖通最核心的數(shù)據(jù)均來(lái)自 IoT 終端設(shè)備。在整個(gè) IoT 環(huán)境下,分布著無(wú)數(shù)個(gè)終端傳感器。從小的維度看,傳感器產(chǎn)生的數(shù)據(jù)本身屬于 Small Data(或者稱(chēng)為 Little Data)。當(dāng)把所有傳感器連接成一個(gè)大的 IoT 網(wǎng)絡(luò),產(chǎn)生自不同傳感器的數(shù)據(jù)經(jīng)由 Gateway 與云端相連接,并最終在云端形成 Big Data 。
在我們的場(chǎng)景下,IoT 平臺(tái)本身會(huì)對(duì)不同協(xié)議的數(shù)據(jù)進(jìn)行初步解析,通過(guò)定制的硬件網(wǎng)絡(luò)設(shè)備將解析后的半結(jié)構(gòu)化 JSON 數(shù)據(jù)經(jīng)由網(wǎng)絡(luò)發(fā)送到云 Kafka。云 Kafka 扮演了整個(gè)數(shù)據(jù)管道的入口。
數(shù)據(jù)入湖:Hudi
IoT 場(chǎng)景下的數(shù)據(jù)有如下幾個(gè)特點(diǎn):
時(shí)序數(shù)據(jù):傳感器產(chǎn)生的數(shù)據(jù)記錄中包含時(shí)間相關(guān)的信息,數(shù)據(jù)本身具有時(shí)間屬性,因此不同的數(shù)據(jù)之間可能存在一定的相關(guān)性。利用 as-of-join 將不同時(shí)間序列數(shù)據(jù) join 到一起是下游數(shù)據(jù)預(yù)測(cè)分析的基礎(chǔ)
數(shù)據(jù)的實(shí)時(shí)性:傳感器實(shí)時(shí)生成數(shù)據(jù)并以最低延遲的方式傳輸?shù)綌?shù)據(jù)管道,觸發(fā)規(guī)則引擎,生成告警和事件,通知相關(guān)工作人員。
數(shù)據(jù)體量巨大:IoT 網(wǎng)絡(luò)環(huán)境下遍布各地的成千上萬(wàn)臺(tái)設(shè)備及其傳感器再通過(guò)接入服務(wù)將海量的數(shù)據(jù)歸集到平臺(tái)
數(shù)據(jù)協(xié)議多樣:通常在 IoT 平臺(tái)接入的不同種類(lèi)設(shè)備中,上傳數(shù)據(jù)協(xié)議種類(lèi)多樣,數(shù)據(jù)編碼格式不統(tǒng)一
數(shù)據(jù)半結(jié)構(gòu)化: 不同設(shè)備包含不同的屬性,基于JSON 結(jié)構(gòu)把所有IoT模型抽象為JSON 字符串
IoT 數(shù)據(jù)上述特點(diǎn)給數(shù)據(jù)處理、數(shù)據(jù)分析及數(shù)據(jù)科學(xué)等帶來(lái)了諸多挑戰(zhàn),慶幸的是,這些挑戰(zhàn)借助 Spark 和 Delta Lake 都可以很好地應(yīng)對(duì)。Hudi Lake 提供了 ACID 事務(wù)保證,支持增量更新數(shù)據(jù)表以及流批同時(shí)寫(xiě)數(shù)據(jù)。借助 Spark Structed Streaming 可以實(shí)現(xiàn) IoT 時(shí)序數(shù)據(jù)實(shí)時(shí)入湖。
以下是 Hudi Lake 經(jīng)典的三級(jí)數(shù)據(jù)表架構(gòu)。具體到樓宇科技 IoT 數(shù)據(jù)場(chǎng)景,我們針對(duì)每一層級(jí)的數(shù)據(jù)表分別做了如下定義:
Bronze 表:存儲(chǔ)原生數(shù)據(jù)(Raw Data),數(shù)據(jù)經(jīng)由 Spark Structed Streaming 從 Kafka 消費(fèi)下來(lái)后 Append/Upsert 進(jìn) Hudi Lake 表,該表作為唯一的真實(shí)數(shù)據(jù)表 (Single Source of Truth)
Silver表:該表是在對(duì) Bronze 表的數(shù)據(jù)進(jìn)行加工處理的基礎(chǔ)上生成的中間表,在美的暖通的場(chǎng)景下,數(shù)據(jù)加工處理的步驟涉及到一些復(fù)雜的時(shí)序數(shù)據(jù)計(jì)算邏輯,這些邏輯都包裝在了 Pandas UDF 里提供給 Spark 計(jì)算使用
Gold 表:Silver 表的數(shù)據(jù)施加 Schema 約束并做進(jìn)一步清洗后的數(shù)據(jù)匯入 Gold 表,該表提供給下游的 Ad Hoc 查詢(xún)分析及數(shù)據(jù)科學(xué)使用
數(shù)據(jù)分析:Ad-Hoc 查詢(xún) & 實(shí)時(shí)分析
我們內(nèi)部在開(kāi)源 Superset 基礎(chǔ)上定制了內(nèi)部版本的 SQL 查詢(xún)與數(shù)據(jù)可視化平臺(tái),通過(guò)StarRocks Lake Catalog實(shí)現(xiàn)對(duì)湖數(shù)據(jù)查詢(xún)。借助 Superset ,數(shù)據(jù)分析師及數(shù)據(jù)科學(xué)家可以快速高效的對(duì) Hudi Lake 表進(jìn)行數(shù)據(jù)探索。
StarRocks主要應(yīng)用于BI報(bào)表分析平臺(tái) 、實(shí)時(shí)大屏(如設(shè)備實(shí)時(shí)跟蹤場(chǎng)景),通過(guò)Serverless StarRocks可大大提高對(duì)數(shù)據(jù)湖的分析和查詢(xún)性能,相較于Trino等查詢(xún)性能有3-5倍性能提升。且利用物化視圖可以對(duì)實(shí)時(shí)寫(xiě)入數(shù)據(jù)進(jìn)行再次近實(shí)時(shí)加工和處理,滿足大屏分析等實(shí)時(shí)數(shù)據(jù)展示、進(jìn)一步提升查詢(xún)性能、降低資源使用。
數(shù)據(jù)科學(xué):Jupyter 交互式開(kāi)發(fā)
樓宇能耗優(yōu)化與設(shè)備故障診斷預(yù)測(cè)是樓宇科技IoT 大數(shù)據(jù)平臺(tái)建設(shè)的兩個(gè)主要業(yè)務(wù)目標(biāo)。在 IoT 數(shù)據(jù)管道下游,需要對(duì)接機(jī)器學(xué)習(xí)平臺(tái),F(xiàn)階段為了更快速方便地支撐起數(shù)據(jù)科學(xué)場(chǎng)景,Serverless Spark 支持對(duì)接在數(shù)據(jù)科學(xué)場(chǎng)景下更友好的 Jupyter Notebook ,通過(guò)在 Jupyter 上使用 PySpark ,可以將作業(yè)運(yùn)行到Serverless Spark上;對(duì)于有周期性執(zhí)行的作業(yè),也可以借助 Apache Airflow 對(duì)作業(yè)進(jìn)行調(diào)度。同時(shí),考慮到機(jī)器學(xué)習(xí)模型構(gòu)建、迭代訓(xùn)練、指標(biāo)檢測(cè)、部署等基本環(huán)節(jié),我們也在探索 MLOps ,目前已概念驗(yàn)證通過(guò)OSS+MLflow+Serverless Spark
Hudi Lake 數(shù)據(jù)入湖(批流一體)
query = (
df.writeStream
.outputMode("append")
.options(**hudi_options)
.format("hudi")
.option("path", table_oss_path)
.option("checkpointLocation", streaming_checkpoint_location)
.trigger(availableNow=True)
.start()
)
湖表管理
Compaction & Z-Ordering
通過(guò)Spark Streaming實(shí)時(shí)的將數(shù)據(jù)寫(xiě)入到Hudi湖存儲(chǔ)上能夠提升數(shù)據(jù)的新鮮度,但同時(shí)也產(chǎn)生大量的小文件影響下游系統(tǒng)的查詢(xún)性能。另外,對(duì)于查詢(xún)模式相對(duì)固定的Hudi表,我們也通過(guò)Z-Order來(lái)優(yōu)化數(shù)據(jù)布局,再借助Data-Skipping能力能夠進(jìn)一步提高查詢(xún)性能。同時(shí)由于Z-Order使得局部數(shù)據(jù)結(jié)構(gòu)相似,也使得以Parquet格式存儲(chǔ)時(shí)有更大的壓縮效果,降低了存儲(chǔ)成本。
美的樓宇客戶IoT數(shù)據(jù)以天為維度進(jìn)行分區(qū)管理,數(shù)據(jù)實(shí)時(shí)注入到特定的天級(jí)分區(qū)內(nèi),因此我們通過(guò)EMR Serverless Spark產(chǎn)品以T+1的方式對(duì)T分區(qū)內(nèi)的數(shù)據(jù)進(jìn)行帶有Z-Order的Compaction實(shí)現(xiàn)了高效的Hudi表的文件管理,有效的提升了查詢(xún)性能。
call run_clustering(
table => '{db_name}.{table_name}',
op => 'scheduleAndExecute',
order => 'device_id',
order_strategy => 'z-order',
predicate => '({predicate})',
show_involved_partition => false,
options => "{options}"
);
Clean
Hudi Lake支持事務(wù)提交提供了多版本、TimeTravel等豐富的功能,但也使得歷史的過(guò)期的文件依然保留在文件系統(tǒng)中造成存儲(chǔ)的浪費(fèi)。我們也基于EMR Serverless Spark實(shí)現(xiàn)了天級(jí)調(diào)度Clean作業(yè)來(lái)定期清除不需要的數(shù)據(jù)文件,避免存儲(chǔ)資源浪費(fèi)。
總結(jié)與展望
我們基于阿里云 EMR Serverless Spark技術(shù)?焖贅(gòu)建了 IoT 數(shù)據(jù)處理平臺(tái),Serverless Spark全托管免運(yùn)維、自研 Fusion 引擎,內(nèi)置高性能向量化計(jì)算和 RSS 能力,相比開(kāi)源版本3倍以上的性能優(yōu)勢(shì)以及計(jì)算/存儲(chǔ)分離的架構(gòu),為我們節(jié)省了總體成本。同時(shí),EMR Serverless Spark自身提供的豐富特性,也極大提升了我們數(shù)據(jù)團(tuán)隊(duì)的生產(chǎn)力,為數(shù)據(jù)分析業(yè)務(wù)的快速開(kāi)展交付奠定了基礎(chǔ)。未來(lái),美的樓宇科技希望與阿里云 EMR 團(tuán)隊(duì)針對(duì) IoT 場(chǎng)景輸出更多行業(yè)先進(jìn)解決方案。