溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么理解Vineyard加入CNCF Sandbox

發布時間:2021-10-28 09:15:11 來源:億速云 閱讀:178 作者:iii 欄目:云計算

本篇內容介紹了“怎么理解Vineyard加入CNCF Sandbox”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

項目介紹

現有的大數據分析場景中,對于端到端任務,不同的子任務之間通常使用例如 HDFS、S3、OSS 這樣的分布式文件系統或對象存儲系統,來共享任務之間的中間數據,這種方式在運行效率和研發效率上存在諸多問題,以下圖所示的一個風控作業工作流為例:  怎么理解Vineyard加入CNCF Sandbox

  1. 工作流中不同任務之間為了共享中間數據,前一個任務將結果寫入文件系統,完成之后,后一個再將文件讀出作為輸入,這個過程帶來了額外的序列化及反序列化、內存拷貝、以及網絡、IO 的開銷,我們從歷史任務中觀察到有超過 60% 的任務為此花費了 40% 以上的執行時間。

  2. 對于生產環境,為了高效地解決某一個特定范式的問題往往會引入一個新系統(例如分布式圖計算),但這樣的系統往往難以直接與工作流中的其他系統無縫銜接,需要很多重復的 IO、數據格式轉換和適配的研發工作。

  3. 使用外部文件系統共享數據給工作流帶來了額外的中斷,因為往往只有當一個任務完全寫完所有結果,下一個任務才能開始讀取和計算,這使得跨任務的流水線并行無法被應用。

  4. 現有的分布式文件系統在共享中間數據時,特別是在云原生環境下,并沒有很好的處理分布式數據的位置問題,造成網絡開銷的浪費,從而降低端到端執行效率。

為了解決現有大數據分析工作流中存在的上述問題,我們設計和實現了分布式內存數據共享引擎 Vineyard。

怎么理解Vineyard加入CNCF Sandbox

Vineyard 從以下三個角度來應對上述幾個問題:

  1. 為了使端到端工作流中任務之間的數據共享更加高效,Vineyard 通過內存映射的方式,支持系統間零拷貝的數據共享,省去了額外的 IO 開銷。

  2. 為了簡化新計算引擎接入現有系統所需要的適配和開發,Vineyard 對常見的數據類型,提供了開箱即用的抽象,例如 Tensor、DataFrame、Graph,等等,從而不同計算引擎之間共享中間結果不再需要額外的序列化和反序列。同時,Vineyard 將 IO、數據遷移、快照等可復用的組件以插件的形式實現,使其能夠很靈活地按需注冊到計算引擎中去,降低與計算引擎本身無關的開發成本。

  3. Vineyard 提供一系列 operators,來實現更高效靈活的數據共享。例如 Pipeline operator 實現了跨任務的流水線并行,使得后續任務可以隨著前序任務輸出的產生,同時進行計算,提高了端到端整體效率。

  4. Vineyard 與 Kubernetes 集成,通過 Scheduler Plugin,讓任務的調度能夠感知所需要的數據的局部性,在 Kubernetes 讓單個任務的 Pod 盡可能地調度到與 Pod 所需的輸入數據對其的機器上,來減小數據遷移需要的網絡開銷,提升端到端性能。

在初步的對比實驗中,相比于使用 HDFS 來共享中間數據,對于評測任務,Vineyard 能夠大幅降低用于交換中間結果引入的額外開銷,對于整個工作流的端到端時間有 1.34 倍的提升。

核心功能

接下來從 Vineyard 核心的設計與實現,以及 Vineyard 如何助力云原生環境中大數據分析任務兩個方面來介紹 Vineyard 的核心功能。

1. 分布式內存數據共享

Vineyard 將內存中的數據表示為 Object。Object 可以是 Local 的,也可以是 Global 的,以分布式執行引擎 Mars 和 Dask 為例,一個 DataFrame 往往被拆分成很多個 Chunk 以利用多臺機器的計算能力,每臺機器上有多個 Chunk,這些 Chunk 是 Vineyard 中的 LocalObject,這些 Chunk 一起構成了一個全局的視圖,即 GlobalDataFrame。這個 GlobalDataFrame 能夠直接共享給其他計算引擎,如 GraphScope,作為圖數據的輸入。有了這些數據類型的抽象,Vineyard 上的不同計算引擎之間就可以無縫地共享中間結果,將一個任務的輸出直接用作下一個任務的輸出。  更具體地,Vineyard 中又是如果表達一個特定類型的 Object,使之能夠很容易地適配到不同的計算引擎中去呢?這得益于 Vineyard 在 Object 的表示上提供的靈活性。Vineyard 中,一個 Object 包括兩個部分,Metadata,以及一組 Blob。Blob 中存儲著實際的數據,而 Metadata 則用于解釋這些 Blob 的語義。例如對于 Tensor,Blob 是一段連續內存,存儲著 Tensor 中所有的元素,而 Metadata 中記錄了 Tensor 的類型、形狀、以及行主序還是列主序等屬性。在 Python 中,這個 Object 可以被解釋為一個 Numpy 的 NDArray,而在 C++ 中,這個 Object 可以被解釋為一個 xtensor 中的 tensor。這兩種不同編程語言的 SDK 中,共享這個 Tensor 不會帶來額外的 IO、拷貝、序列化/反序列化、以及類型轉換的開銷。  同時,Vineyard 中的 Metadata 是可嵌套的,這使得我們通過很容易地將任何復雜的數據類型描述為 Vineyard 中的 Object,不會限制計算引擎的表達能力。以 GlobalDataFrame 為例,見下圖中 Metadata 的結構。  怎么理解Vineyard加入CNCF Sandbox

2. 云原生環境中數據與任務的協同調度

對于一個真實部署的大數據分析流水線,僅僅有任務之間的數據共享是遠遠不夠的。在云環境中,一個端到端流水線中包含的多個子任務在被 Kubernetes 調度時僅僅考慮了需要的資源約束,連續的兩個任務的 co-locate 無法保證,在兩個任務之間共享中間結果時仍然有數據遷移引入的網絡開銷,如下圖,在運行 Task B 時,因為兩個任務的 Pod 沒有對齊,數據分片 A3、A4 需要被遷移到 Pod 所在的 Vineyard 實例上。  怎么理解Vineyard加入CNCF Sandbox

對此,Vineyard 通過 CRD 將集群中的數據(Vineyard Objects)表示為可觀測的資源,并基于 Kubernetes 的 Scheduler Framework 設計和實現了一個考慮數據局部性的調度器插件。當前一個任務 Task A 完成后,從結果對象的 Metadata 中,調度器插件可以知道所有分片的位置,在啟動下一個任務時,調度器給數據所在的節點(圖中的 Node 1、Node 2)更高的優先級,使任務 Task B 也盡可能地被調度到對應的節點上,從而省去了數據遷移引入的額外開銷,來改善端到端的性能。

快速上手

Vineyard 集成了 Helm 以方便用戶安裝和部署:

helm repo add vineyard https://vineyard.oss-ap-southeast-1.aliyuncs.com/charts/
helm install vineyard vineyard/vineyard

安裝之后,系統中會部署一個 Vineyard DaemonSet,并暴露一個 UNIX domain socket 用于與應用的任務 Pod 之間的共享內存和 IPC 通信。

“怎么理解Vineyard加入CNCF Sandbox”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女