美的樓宇科技基于阿里云 EMR Serverless Spark 構建 LakeHouse 湖倉數據平臺

作者:美的樓宇科技事業部 先行研究中心智能技術部

美的樓宇科技 IoT 數據平臺建設背景

美的樓宇科技事業部(以下簡稱樓宇科技)是美的集團旗下五大板塊之一,產品覆蓋多聯機組、大型冷水機組、單元機、機房空調、扶梯、直梯、貨梯以及樓宇自控軟件和建筑弱電集成解決方案,遠銷海內外200多個國家。針對當前設備數據量龐大且持續增長、數據呈現半結構化特點的現狀,現有系統僅停留在數據存儲和基礎使用層面,缺乏深度挖掘數據價值的能力,導致大量潛在信息未被充分利用。因此,迫切需要構建一個統一且通用的 IoT 數據平臺,平臺不僅要具備高度的彈性和輕量化特性,還應具備強大的大規模數據處理能力以及數據科學和 AI 技術支持,以實現快速的數據分析與智能化挖掘,推動樓宇系統的智能化升級,支持節能、設備管理和運維等方面的精確決策。我們的 IoT 數據平臺建設基于阿里云 EMR Serverless Spark ,我們將就IoT數據平臺建設技術選型上的一些思考,以及 Spark 技術棧尤其是場景應用實踐做一下分享。

Lakehouse 架構

樓宇科技通過阿里云EMR Serverless Spark,實現了數據與 AI技術的有效融合,并結合EMR Serverless StarRocks搭建了Lakehouse 平臺。該平臺核心部分如下:

首先,上游設備或傳感器數據通過Serverless Spark提交Streaming作業,實時以Apache Hudi格式寫入數據湖,湖表元數據同步至DLF,以保持數據的實時性。

接著,采用天級調度執行Hudi分區數據的Compaction,并使用 Z-order 來優化數據布局,實現了10倍以上的查詢加速。同時,DLF的鎖機制確保了實時寫入與異步湖表任務的并發事務管理,為作業穩定性、數據一致性提供了保障。

此外,還通過 Serverless Spark構建了數據Medallion架構,從加載的源始數據開始(Bronze),經過清洗轉化為明細數據(Silver),然后根據不同業務需求將明細層數據轉化為高質量的指標數據(Gold),為上層業務系統提供支持。

在AI應用方面,樓宇科技通過Serverless Spark PySpark 任務,并基于PyArrow UDF調用自研算法實現了千億級別數據在百萬級維度的聚合,推動了Data + AI技術在實際業務中的應用。最后,處理后的指標數據從數據湖中被加載到StarRocks中,為上層應用提供Dashboard和報表支持,提升了數據的可視化和決策能力。

以下架構圖展示了如何利用Serverless Spark結合開源湖格式Hudi、ML/AI的多種工具庫,以及阿里云 DLF 統一湖倉管理平臺,實現高效的數據處理和AI賦能,使用Serverless StarRocks實現極速數據分析,為業務應用帶來顯著的提升。

選擇 Spark 技術棧

在數據平臺計算引擎層技術選型上,前期的架構選型我們做了很多的調研,綜合各個方面考慮,希望選擇一個成熟且統一的平臺:既能夠支持數據處理、數據分析場景,也能夠很好地支撐數據科學場景。加上團隊成員對 Python 及 Spark 的經驗豐富,所以,從一開始就將目標鎖定到了 Spark 技術棧。

為什么選擇阿里云EMR Serverless Spark

EMR Serverless Spark 解決了我們什么痛點
  1. 自建集群 POC 測試需要花費大量的成本,周期也比較長;

  2. 針對千億級別的IOT設備上報數據,引擎性能非常關鍵。對原始數據做一輪點位提取(t+1處理),用于后續數據開發和分析,每日的點位提取需要在短時間內運行大量資源對湖原始數據進行查詢和處理;

  3. 需要完善的Spark 生態,來實現全鏈路數據流轉,來滿足批、流、交互式、機器學習等不同場景需求;

  4. 彈性計算能力,需要一次性支持大規模計算,縮短數據使用延遲。多聯機能耗運行月度報告生成的過程中,每月5號之前需要大量資源去生成上月的月度報告指標;

  5. Data+AI場景的支持能力。

成本相比過去架構提升
  1. 不同場景下的整體性能提升50%以上

  2. 綜合成本下降30%左右

IoT 數據鏈條

我們接入的 IoT 數據分為兩部分,歷史存量數據和實時數據。目前,歷史存量數據是通過 Spark SQL 以天為單位從不同客戶關系數據庫批量導入 Hudi Lake 表中;實時數據通過 IoT 平臺采集到云 Kafka ,經由 Spark Structured Streaming 消費后實時寫入到 Hudi Lake 表中。在這個過程中,我們將實時數據和歷史數據都 sink 到同一張 Hudi 表里,這種批流一體操作可大大簡化我們的 ETL 流程(參考后面的案例部分)。數據管道下游,我們對接數據分析及數據科學工作流。

IoT 數據采集:從 Little Data 到 Big Data

作為 IoT 場景的典型應用,美的暖通最核心的數據均來自 IoT 終端設備。在整個 IoT 環境下,分布著無數個終端傳感器。從小的維度看,傳感器產生的數據本身屬于 Small Data(或者稱為 Little Data)。當把所有傳感器連接成一個大的 IoT 網絡,產生自不同傳感器的數據經由 Gateway 與云端相連接,并最終在云端形成 Big Data 。

在我們的場景下,IoT 平臺本身會對不同協議的數據進行初步解析,通過定制的硬件網絡設備將解析后的半結構化 JSON 數據經由網絡發送到云 Kafka。云 Kafka 扮演了整個數據管道的入口。

數據入湖:Hudi

IoT 場景下的數據有如下幾個特點:

時序數據:傳感器產生的數據記錄中包含時間相關的信息,數據本身具有時間屬性,因此不同的數據之間可能存在一定的相關性。利用 as-of-join 將不同時間序列數據 join 到一起是下游數據預測分析的基礎

數據的實時性:傳感器實時生成數據并以最低延遲的方式傳輸到數據管道,觸發規則引擎,生成告警和事件,通知相關工作人員。

數據體量巨大:IoT 網絡環境下遍布各地的成千上萬臺設備及其傳感器再通過接入服務將海量的數據歸集到平臺

數據協議多樣:通常在 IoT 平臺接入的不同種類設備中,上傳數據協議種類多樣,數據編碼格式不統一

數據半結構化: 不同設備包含不同的屬性,基于JSON 結構把所有IoT模型抽象為JSON 字符串

IoT 數據上述特點給數據處理、數據分析及數據科學等帶來了諸多挑戰,慶幸的是,這些挑戰借助 Spark 和 Delta Lake 都可以很好地應對。Hudi Lake 提供了 ACID 事務保證,支持增量更新數據表以及流批同時寫數據。借助 Spark Structed Streaming 可以實現 IoT 時序數據實時入湖。

以下是 Hudi Lake 經典的三級數據表架構。具體到樓宇科技 IoT 數據場景,我們針對每一層級的數據表分別做了如下定義:

Bronze 表:存儲原生數據(Raw Data),數據經由 Spark Structed Streaming 從 Kafka 消費下來后 Append/Upsert 進 Hudi Lake 表,該表作為唯一的真實數據表 ?(Single Source of Truth)

Silver表:該表是在對 Bronze 表的數據進行加工處理的基礎上生成的中間表,在美的暖通的場景下,數據加工處理的步驟涉及到一些復雜的時序數據計算邏輯,這些邏輯都包裝在了 Pandas UDF 里提供給 Spark 計算使用

Gold 表:Silver 表的數據施加 Schema 約束并做進一步清洗后的數據匯入 Gold 表,該表提供給下游的 Ad Hoc 查詢分析及數據科學使用

數據分析:Ad-Hoc 查詢 & 實時分析

我們內部在開源 Superset 基礎上定制了內部版本的 SQL 查詢與數據可視化平臺,通過StarRocks Lake Catalog實現對湖數據查詢。借助 Superset ,數據分析師及數據科學家可以快速高效的對 Hudi Lake 表進行數據探索。

StarRocks主要應用于BI報表分析平臺 、實時大屏(如設備實時跟蹤場景),通過Serverless StarRocks可大大提高對數據湖的分析和查詢性能,相較于Trino等查詢性能有3-5倍性能提升。且利用物化視圖可以對實時寫入數據進行再次近實時加工和處理,滿足大屏分析等實時數據展示、進一步提升查詢性能、降低資源使用。

數據科學:Jupyter 交互式開發

樓宇能耗優化與設備故障診斷預測是樓宇科技IoT 大數據平臺建設的兩個主要業務目標。在 IoT 數據管道下游,需要對接機器學習平臺。現階段為了更快速方便地支撐起數據科學場景,Serverless Spark 支持對接在數據科學場景下更友好的 Jupyter Notebook ,通過在 Jupyter 上使用 PySpark ,可以將作業運行到Serverless Spark上;對于有周期性執行的作業,也可以借助 Apache Airflow 對作業進行調度。同時,考慮到機器學習模型構建、迭代訓練、指標檢測、部署等基本環節,我們也在探索 MLOps ,目前已概念驗證通過OSS+MLflow+Serverless Spark

Hudi Lake 數據入湖(批流一體)

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

通過Spark Streaming實時的將數據寫入到Hudi湖存儲上能夠提升數據的新鮮度,但同時也產生大量的小文件影響下游系統的查詢性能。另外,對于查詢模式相對固定的Hudi表,我們也通過Z-Order來優化數據布局,再借助Data-Skipping能力能夠進一步提高查詢性能。同時由于Z-Order使得局部數據結構相似,也使得以Parquet格式存儲時有更大的壓縮效果,降低了存儲成本。

美的樓宇客戶IoT數據以天為維度進行分區管理,數據實時注入到特定的天級分區內,因此我們通過EMR Serverless Spark產品以T+1的方式對T分區內的數據進行帶有Z-Order的Compaction實現了高效的Hudi表的文件管理,有效的提升了查詢性能。

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支持事務提交提供了多版本、TimeTravel等豐富的功能,但也使得歷史的過期的文件依然保留在文件系統中造成存儲的浪費。我們也基于EMR Serverless Spark實現了天級調度Clean作業來定期清除不需要的數據文件,避免存儲資源浪費。

總結與展望

我們基于阿里云 EMR Serverless Spark技術棧快速構建了 IoT 數據處理平臺,Serverless Spark全托管免運維、自研 Fusion 引擎,內置高性能向量化計算和 RSS 能力,相比開源版本3倍以上的性能優勢以及計算/存儲分離的架構,為我們節省了總體成本。同時,EMR Serverless Spark自身提供的豐富特性,也極大提升了我們數據團隊的生產力,為數據分析業務的快速開展交付奠定了基礎。未來,美的樓宇科技希望與阿里云 EMR 團隊針對 IoT 場景輸出更多行業先進解決方案。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896034.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896034.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896034.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Html5學習教程,從入門到精通,HTML5 元素語法知識點及案例代碼(2)

HTML5 元素語法知識點及案例代碼 一、HTML5 元素概述 HTML5 元素是構成網頁的基本單位&#xff0c;每個元素都有特定的語義和功能。HTML5 元素由開始標簽、內容和結束標簽組成&#xff0c;例如&#xff1a; <p>這是一個段落。</p><p> 是開始標簽這是一個段…

23種設計模式 - 備忘錄模式

模式定義 備忘錄模式&#xff08;Memento Pattern&#xff09;是一種行為型設計模式&#xff0c;其核心是在不破壞對象封裝性的前提下&#xff0c;捕獲并保存對象的內部狀態&#xff0c;以便后續恢復。該模式特別適用于需要實現撤銷/重做、狀態回滾等功能的系統&#xff0c;如…

2025asp.net全棧技術開發學習路線圖

2025年技術亮點?&#xff1a; Blazor已全面支持WebAssembly 2.0標準 .NET 8版本原生集成AI模型部署能力 Azure Kubernetes服務實現智能自動擴縮容 EF Core新增向量數據庫支持特性 ?ASP.NET 全棧開發關鍵技術說明&#xff08;2025年視角&#xff09;? 以下技術分類基于現…

Linux設備驅動-練習

練習要求&#xff1a; 一、設備樹 1、配置設備樹信息&#xff1a;將3個led燈和1個風扇使用到的設備信息配置到設備樹中 二、設備驅動層 1、通過of_find_node_by_name、of_get_named_gpion等內核核心層統一的api接口調用外設&#xff1b; 2、通過udev設備管理器自動注冊并創建設…

Python應用算法之貪心算法理解和實踐

一、什么是貪心算法&#xff1f; 貪心算法&#xff08;Greedy Algorithm&#xff09;是一種簡單而高效的算法設計思想&#xff0c;其核心思想是&#xff1a;在每一步選擇中&#xff0c;都采取當前狀態下最優的選擇&#xff08;即“局部最優解”&#xff09;&#xff0c;希望通…

競爭與冒險問題【數電速通】

時序邏輯電路&#xff1a; 組合邏輯電路中的競爭與冒險問題&#xff1a; 在組合邏輯電路中&#xff0c;競爭和冒險是兩種常見的時序問題&#xff0c;它們通常由電路的延時特性和不完美的設計引起。下面是這兩種現象的詳細解釋&#xff1a; 1. 競爭&#xff08;Race Condition&…

nasm - BasicWindow_64

文章目錄 nasm - BasicWindow_64概述筆記nasm_main.asmmy_build.batEND nasm - BasicWindow_64 概述 學個demo, 這個demo最主要學到了: 不用在調用每個API前都準備陰影區&#xff0c;在API調用后棧平衡。 可以在函數入口處考慮到所用的棧尺寸最大值(16字節對齊&#xff0c;陰…

JavaScript變量的作用域介紹

JavaScript變量的作用域介紹 JavaScript 變量的作用域決定了變量在代碼中的可訪問性。 var 是 JavaScript 中最早用于聲明變量的關鍵字&#xff0c;它函數作用域或全局作用域。 let 關鍵字&#xff0c;具有塊級作用域、全局作用域。 const關鍵字&#xff0c;具有塊級作用域…

Microsoft 365 Copilot中使用人數最多的是哪些應用

今天在瀏覽Microsoft 365 admin center時發現&#xff0c;copilot會自動整理過去30天內所有用戶使用copilot的概況&#xff1a; 直接把這個圖丟給copilot讓它去分析&#xff0c;結果如下&#xff1a; 總用戶情況 總用戶數在各應用中均為 561 人&#xff0c;說明此次統計的樣本…

ue5.2.1 quixel brideg顯示asset not available in uAsset format

我從未見過如此傻x的bug&#xff0c;在ue5.2.1上通過內置quixel下載資源顯示 asset not available in uAsset format 解決辦法&#xff1a;將ue更新到最新版本&#xff0c;通過fab進入商場選擇資源后add to my library 點擊view in launcher打開epic launcher&#xff0c;就可…

當電腦上有幾個python版本Vscode選擇特定版本python

查看當前vscode用的python版本命令 Import sys print(sys.version) 修改VSCODE解釋器 打開 VSCode。 按下 CtrlShiftP打開命令面板。 輸入 Python: Select Interpreter 并選擇它。 從彈出的列表中選擇你安裝的 Python 解釋器。如果你有多個 Python 版本&#xff08;例如…

Vue 中 nextTick 的原理詳解

1. 為什么需要 nextTick Vue 采用 異步渲染機制&#xff0c;當響應式數據發生變化時&#xff0c;Vue 并不會立即更新 DOM&#xff0c;而是將這些變化放入一個 隊列 中&#xff0c;并在 同一事件循環&#xff08;Event Loop&#xff09;中合并相同的修改&#xff0c;最后執行批…

Spring面試題2

1、compareable和compactor區別 定義與包位置:Comparable是一個接口&#xff0c;位于java.lang包,需要類去實現接口&#xff1b;而Compactor是一個外部比較器&#xff0c;位于java.util包 用法&#xff1a;Comparable只需要實現int compareTo(T o) 方法&#xff0c;比較當前對…

DuodooBMS源碼解讀之 cncw_statement模塊

財務應收應付擴展模組用戶使用手冊 一、模塊概述 財務應收應付擴展模組是一個基于 Odoo18 的擴展模塊&#xff0c;主要對財務應收應付相關功能進行了修改和增強。該模塊增加了多個功能模塊&#xff0c;如預收款單模塊、費用類別設置模塊等&#xff0c;同時對發票、公司、銷售…

JUC并發—9.并發安全集合四

大綱 1.并發安全的數組列表CopyOnWriteArrayList 2.并發安全的鏈表隊列ConcurrentLinkedQueue 3.并發編程中的阻塞隊列概述 4.JUC的各種阻塞隊列介紹 5.LinkedBlockingQueue的具體實現原理 6.基于兩個隊列實現的集群同步機制 4.JUC的各種阻塞隊列介紹 (1)基于數組的阻塞…

vue項目啟動時報錯:error:0308010C:digital envelope routines::unsupported

此錯誤與 Node.js 的加密模塊有關&#xff0c;特別是在使用 OpenSSL 3.0 及以上版本時。Vue 項目在啟動時可能會依賴一些舊的加密算法&#xff0c;而這些算法在 OpenSSL 3.0 中默認被禁用&#xff0c;導致 error:0308010C:digital envelope routines::unsupported 錯誤。 解決…

ncDLRES:一種基于動態LSTM和ResNet的非編碼RNA家族預測新方法

現有的計算方法主要分為兩類&#xff1a;第一類是通過學習序列或二級結構的特征來預測ncRNAs家族&#xff0c;另一類是通過同源序列之間的比對來預測ncRNAs家族。在第一類中&#xff0c;一些方法通過學習預測的二級結構特征來預測ncRNAs家族。二級結構預測的不準確性可能會導致…

愛普生 SG-8101CE 可編程晶振在筆記本電腦的應用

在筆記本電腦的精密架構中&#xff0c;每一個微小的元件都如同精密儀器中的齒輪&#xff0c;雖小卻對整體性能起著關鍵作用。如今的筆記本電腦早已不再局限于簡單的辦公用途&#xff0c;其功能愈發豐富多樣。從日常輕松的文字處理、網頁瀏覽&#xff0c;到專業領域中對圖形處理…

SPRING10_getBean源碼詳細解讀、流程圖

文章目錄 ①. getBean方法的入口-DefaultListableBeanFactory②. DefaultListableBeanFactory調用getBean③. 進入到doGetBean方法④. getSingleton三級緩存方法⑤. getSingleton()方法分析⑥. createBean創建對象方法⑦. 對象創建、屬性賦值、初始化⑧. getBean最詳細流程圖 ①…

IDEA中查詢Maven項目的依賴樹

在Maven項目中&#xff0c;查看項目的依賴樹是一個常見的需求&#xff0c;特別是當你需要了解項目中直接或間接依賴了哪些庫及其版本時。你可以通過命令行使用Maven的dependency:tree插件來做到這一點。這個命令會列出項目中所有依賴的樹狀結構。 打開idea項目的終端&#xff…