Vineyard 加入 CNCF Sandbox,将继续瞄准云原生大数据分析领域
作者 |?Vineyard 團(tuán)隊(duì)
來源 | 阿里巴巴云原生公眾號
?
Vineyard 是一個(gè)專為云原生環(huán)境下大數(shù)據(jù)分析場景中端到端工作流提供內(nèi)存數(shù)據(jù)共享的分布式引擎,我們很高興宣布 Vineyard 在 2021 年 4 月 27 日被云原生基金會(CNCF)TOC 接受為沙箱(Sandbox)項(xiàng)目。
?
Vineyard 項(xiàng)目開源地址:
https://github.com/alibaba/v6d
項(xiàng)目介紹
現(xiàn)有的大數(shù)據(jù)分析場景中,對于端到端任務(wù),不同的子任務(wù)之間通常使用例如 HDFS、S3、OSS 這樣的分布式文件系統(tǒng)或?qū)ο蟠鎯ο到y(tǒng),來共享任務(wù)之間的中間數(shù)據(jù),這種方式在運(yùn)行效率和研發(fā)效率上存在諸多問題,以下圖所示的一個(gè)風(fēng)控作業(yè)工作流為例:
?
為了解決現(xiàn)有大數(shù)據(jù)分析工作流中存在的上述問題,我們設(shè)計(jì)和實(shí)現(xiàn)了分布式內(nèi)存數(shù)據(jù)共享引擎 Vineyard。
Vineyard 從以下三個(gè)角度來應(yīng)對上述幾個(gè)問題:
?
在初步的對比實(shí)驗(yàn)中,相比于使用 HDFS 來共享中間數(shù)據(jù),對于評測任務(wù),Vineyard 能夠大幅降低用于交換中間結(jié)果引入的額外開銷,對于整個(gè)工作流的端到端時(shí)間有 1.34 倍的提升。
核心功能
接下來從 Vineyard 核心的設(shè)計(jì)與實(shí)現(xiàn),以及 Vineyard 如何助力云原生環(huán)境中大數(shù)據(jù)分析任務(wù)兩個(gè)方面來介紹 Vineyard 的核心功能。
?
1. 分布式內(nèi)存數(shù)據(jù)共享
Vineyard 將內(nèi)存中的數(shù)據(jù)表示為 Object。Object 可以是 Local 的,也可以是 Global 的,以分布式執(zhí)行引擎 Mars 和 Dask 為例,一個(gè) DataFrame 往往被拆分成很多個(gè) Chunk 以利用多臺機(jī)器的計(jì)算能力,每臺機(jī)器上有多個(gè) Chunk,這些 Chunk 是 Vineyard 中的 LocalObject,這些 Chunk 一起構(gòu)成了一個(gè)全局的視圖,即 GlobalDataFrame。這個(gè) GlobalDataFrame 能夠直接共享給其他計(jì)算引擎,如 GraphScope,作為圖數(shù)據(jù)的輸入。有了這些數(shù)據(jù)類型的抽象,Vineyard 上的不同計(jì)算引擎之間就可以無縫地共享中間結(jié)果,將一個(gè)任務(wù)的輸出直接用作下一個(gè)任務(wù)的輸出。
?
更具體地,Vineyard 中又是如果表達(dá)一個(gè)特定類型的 Object,使之能夠很容易地適配到不同的計(jì)算引擎中去呢?這得益于 Vineyard 在 Object 的表示上提供的靈活性。Vineyard 中,一個(gè) Object 包括兩個(gè)部分,Metadata,以及一組 Blob。Blob 中存儲著實(shí)際的數(shù)據(jù),而 Metadata 則用于解釋這些 Blob 的語義。例如對于 Tensor,Blob 是一段連續(xù)內(nèi)存,存儲著 Tensor 中所有的元素,而 Metadata 中記錄了 Tensor 的類型、形狀、以及行主序還是列主序等屬性。在 Python 中,這個(gè) Object 可以被解釋為一個(gè) Numpy 的 NDArray,而在 C++ 中,這個(gè) Object 可以被解釋為一個(gè) xtensor 中的 tensor。這兩種不同編程語言的 SDK 中,共享這個(gè) Tensor 不會帶來額外的 IO、拷貝、序列化/反序列化、以及類型轉(zhuǎn)換的開銷。
?
同時(shí),Vineyard 中的 Metadata 是可嵌套的,這使得我們通過很容易地將任何復(fù)雜的數(shù)據(jù)類型描述為 Vineyard 中的 Object,不會限制計(jì)算引擎的表達(dá)能力。以 GlobalDataFrame 為例,見下圖中 Metadata 的結(jié)構(gòu)。
?
2. 云原生環(huán)境中數(shù)據(jù)與任務(wù)的協(xié)同調(diào)度
對于一個(gè)真實(shí)部署的大數(shù)據(jù)分析流水線,僅僅有任務(wù)之間的數(shù)據(jù)共享是遠(yuǎn)遠(yuǎn)不夠的。在云環(huán)境中,一個(gè)端到端流水線中包含的多個(gè)子任務(wù)在被 Kubernetes 調(diào)度時(shí)僅僅考慮了需要的資源約束,連續(xù)的兩個(gè)任務(wù)的 co-locate 無法保證,在兩個(gè)任務(wù)之間共享中間結(jié)果時(shí)仍然有數(shù)據(jù)遷移引入的網(wǎng)絡(luò)開銷,如下圖,在運(yùn)行 Task B 時(shí),因?yàn)閮蓚€(gè)任務(wù)的 Pod 沒有對齊,數(shù)據(jù)分片 A3、A4 需要被遷移到 Pod 所在的 Vineyard 實(shí)例上。
?
對此,Vineyard 通過 CRD 將集群中的數(shù)據(jù)(Vineyard Objects)表示為可觀測的資源,并基于 Kubernetes 的 Scheduler Framework 設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)考慮數(shù)據(jù)局部性的調(diào)度器插件。當(dāng)前一個(gè)任務(wù) Task A 完成后,從結(jié)果對象的 Metadata 中,調(diào)度器插件可以知道所有分片的位置,在啟動(dòng)下一個(gè)任務(wù)時(shí),調(diào)度器給數(shù)據(jù)所在的節(jié)點(diǎn)(圖中的 Node 1、Node 2)更高的優(yōu)先級,使任務(wù) Task B 也盡可能地被調(diào)度到對應(yīng)的節(jié)點(diǎn)上,從而省去了數(shù)據(jù)遷移引入的額外開銷,來改善端到端的性能。
快速上手
Vineyard 集成了 Helm 以方便用戶安裝和部署:
?
安裝之后,系統(tǒng)中會部署一個(gè) Vineyard DaemonSet,并暴露一個(gè) UNIX domain socket 用于與應(yīng)用的任務(wù) Pod 之間的共享內(nèi)存和 IPC 通信。
?
此外,還可以參考 Vineyard 的演示視頻:
https://www.youtube.com/watch?v=vPbF1l5nwwQ&list=PLj6h78yzYM2NoiNaLVZxr-ERc1ifKP7n6&t=585
未來展望
Vineyard 已經(jīng)作為分布式科學(xué)計(jì)算引擎 Mars 和一站式圖計(jì)算系統(tǒng) GraphScope 的存儲引擎,Vineyard 助力大數(shù)據(jù)分析任務(wù)離不開與云原生社區(qū)的緊密互動(dòng),未來Vineyard 會進(jìn)一步地完善與社區(qū)其他項(xiàng)目如 Kubeflow、Fluid 等的集成,助力更多云上大數(shù)據(jù)分析任務(wù)。
?
Vineyard 將繼續(xù)與社區(qū)同行,支持關(guān)注社區(qū)的反饋,致力于推動(dòng)云原生技術(shù)在大數(shù)據(jù)分析領(lǐng)域的生態(tài)建設(shè)和應(yīng)用。歡迎大家關(guān)注 Vineyard 項(xiàng)目,加入 Vineyard 社區(qū)并參與項(xiàng)目的共建與落地!
2021 阿里云開發(fā)者大會重磅開啟!
數(shù)字時(shí)代,如何更好地利用云的能力?什么是新型、便捷的開發(fā)模式?如何讓開發(fā)者更高效地構(gòu)建應(yīng)用?科技賦能社會,技術(shù)推動(dòng)變革,拓展開發(fā)者的能量邊界,一切,因云而不同。點(diǎn)擊立即報(bào)名活動(dòng),2021 阿里云開發(fā)者大會將給你答案。
總結(jié)
以上是生活随笔為你收集整理的Vineyard 加入 CNCF Sandbox,将继续瞄准云原生大数据分析领域的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【深度】阿里巴巴万级规模 K8s 集群全
- 下一篇: 博睿数据与阿里云签订云原生核心合作伙伴计