拥抱云原生,Fluid结合JindoFS :阿里云OSS加速利器
簡介: Fluid 是一個開源的 Kubernetes 原生的分布式數(shù)據(jù)集編排和加速引擎,主要服務(wù)于云原生場景下的數(shù)據(jù)密集型應(yīng)用。在 Fluid 上使用和部署 JindoRuntime 實現(xiàn)數(shù)據(jù)集的可見性、彈性伸縮、數(shù)據(jù)遷移、計算加速等,并流程簡單、兼容原生 k8s 環(huán)境、可以開箱即用。同時深度結(jié)合對象存儲特性,使用navite框架優(yōu)化性能,并支持免密、checksum校驗等云上數(shù)據(jù)安全功能。
1、什么是 Fluid
Fluid 是一個開源的 Kubernetes 原生的分布式數(shù)據(jù)集編排和加速引擎,主要服務(wù)于云原生場景下的數(shù)據(jù)密集型應(yīng)用,例如大數(shù)據(jù)應(yīng)用、AI應(yīng)用等。通過 Kubernetes 服務(wù)提供的數(shù)據(jù)層抽象,可以讓數(shù)據(jù)像流體一樣在諸如 HDFS、OSS、Ceph 等存儲源和 Kubernetes 上層云原生應(yīng)用計算之間靈活高效地移動、復(fù)制、驅(qū)逐、轉(zhuǎn)換和管理。而具體數(shù)據(jù)操作對用戶透明,用戶不必再擔(dān)心訪問遠端數(shù)據(jù)的效率、管理數(shù)據(jù)源的便捷性,以及如何幫助 Kuberntes 做出運維調(diào)度決策等問題。用戶只需以最自然的 Kubernetes 原生數(shù)據(jù)卷方式直接訪問抽象出來的數(shù)據(jù),剩余任務(wù)和底層細節(jié)全部交給 Fluid 處理。Fluid 項目當(dāng)前主要關(guān)注數(shù)據(jù)集編排和應(yīng)用編排這兩個重要場景。數(shù)據(jù)集編排可以將指定數(shù)據(jù)集的數(shù)據(jù)緩存到指定特性的 Kubernetes 節(jié)點,而應(yīng)用編排將指定該應(yīng)用調(diào)度到可以或已經(jīng)存儲了指定數(shù)據(jù)集的節(jié)點上。這兩者還可以組合形成協(xié)同編排場景,即協(xié)同考慮數(shù)據(jù)集和應(yīng)用需求進行節(jié)點資源調(diào)度。
?
?
然后介紹 Fluid 中 Dataset 的概念,數(shù)據(jù)集是邏輯上相關(guān)的一組數(shù)據(jù)的集合,會被運算引擎使用,比如大數(shù)據(jù)的 Spark,AI場景的 TensorFlow,而關(guān)于數(shù)據(jù)集智能的應(yīng)用和調(diào)度會創(chuàng)造工業(yè)界的核心價值。Dataset 的管理實際上也有多個維度,比如安全性,版本管理和數(shù)據(jù)加速。
?
我們希望從數(shù)據(jù)加速出發(fā),對于數(shù)據(jù)集的管理提供支持。在 Dataset上面我們通過定義 Runtime 這樣一個執(zhí)行引擎來實現(xiàn)數(shù)據(jù)集安全性,版本管理和數(shù)據(jù)加速等能力,Runtime 定義了一系列生命周期的接口,可以通過實現(xiàn)這些接口來支持數(shù)據(jù)集的管理和加速,目前 Fluid 中支持的 Runtime 有 AlluxioRuntime 和 JindoRuntime 兩種。Fluid 的目標(biāo)是為 AI 與大數(shù)據(jù)云原生應(yīng)用提供一層高效便捷的數(shù)據(jù)抽象,將數(shù)據(jù)從存儲抽象出來從而達到如下功能:
1、通過數(shù)據(jù)親和性調(diào)度和分布式緩存引擎加速,實現(xiàn)數(shù)據(jù)和計算之間的融合,從而加速計算對數(shù)據(jù)的訪問。
2、將數(shù)據(jù)獨立于存儲進行管理,并且通過 Kubernetes 的命名空間進行資源隔離,實現(xiàn)數(shù)據(jù)的安全隔離。
3、將來自不同存儲的數(shù)據(jù)聯(lián)合起來進行運算,從而有機會打破不同存儲的差異性帶來的數(shù)據(jù)孤島效應(yīng)。
?
2、什么是 JindoRuntime
?
如果要了解Fluid的JindoRuntime,先要介紹JindoFS。它是JindoRuntime的引擎層。
?
JindoFS 是阿里云針對 OSS 開發(fā)的自研大數(shù)據(jù)存儲優(yōu)化引擎,完全兼容 Hadoop 文件系統(tǒng)接口,給客戶帶來更加靈活、高效的計算存儲方案,目前已驗證支持阿里云 EMR 中所有的計算服務(wù)和引擎:Spark、Flink、Hive、MapReduce、Presto、Impala 等。JindoFS 有兩種使用模式,塊存儲(Block)模式和緩存(Cache)模式。Block 模式將文件內(nèi)容以數(shù)據(jù)塊的形式存放在 OSS 上并在本地可選擇使用數(shù)據(jù)備份來進行緩存加速,使用本地的namespace 服務(wù)管理元數(shù)據(jù),從而通過本地元數(shù)據(jù)以及塊數(shù)據(jù)構(gòu)建出文件數(shù)據(jù)。Cache 模式將文件存儲在 OSS上,該模式兼容現(xiàn)有的 OSS 文件系統(tǒng),用戶可以通過 OSS 訪問原有的目錄結(jié)構(gòu)以及文件,同時該模式提供數(shù)據(jù)以及元數(shù)據(jù)的緩存,加速用戶讀寫數(shù)據(jù)的性能。使用該模式的用戶無需遷移數(shù)據(jù)到 OSS,可以無縫對接現(xiàn)有 OSS 上的數(shù)據(jù),在元數(shù)據(jù)同步方面用戶可以根據(jù)不同的需求選擇不同的元數(shù)據(jù)同步策略。
?
在 Fluid 中 JindoRuntime 也是使用 JindoFS 的 Cache 模式進行遠端文件的訪問和緩存,如您需要在其他環(huán)境單獨使用 JindoFS 獲得訪問 OSS 的能力,您也可以下載我們的 JindoFS SDK 按照使用文檔進行部署使用。 JindoRuntime 來源于阿里云EMR團隊自研 JindoFS 分布式系統(tǒng),是支撐 Dataset 數(shù)據(jù)管理和緩存的執(zhí)行引擎實現(xiàn)。Fluid 通過管理和調(diào)度 Jindo Runtime 實現(xiàn)數(shù)據(jù)集的可見性、彈性伸縮、數(shù)據(jù)遷移、計算加速等。在 Fluid 上使用和部署 JindoRuntime 流程簡單、兼容原生 k8s 環(huán)境、可以開箱即用。深度結(jié)合對象存儲特性,使用 navite 框架優(yōu)化性能,并支持免密、checksum 校驗等云上數(shù)據(jù)安全功能。
?
3、JindoRuntime 的優(yōu)勢
JindoRuntime 提供對 Aliyun OSS 對象存儲服務(wù)的訪問和緩存加速能力,并且利用 FUSE 的 POSIX 文件系統(tǒng)接口實現(xiàn)可以像本地磁盤一樣輕松使用 OSS 上的海量文件,具有以下特點:
1、性能卓越
- OSS的讀寫性能突出:深度結(jié)合 OSS 進行讀寫效率和穩(wěn)定性的增強,通過 native 層優(yōu)化對 OSS 訪問接口,優(yōu)化冷數(shù)據(jù)訪問性能,特別是小文件讀寫
- 分布式緩存策略豐富:支持單TB級大文件緩存、元數(shù)據(jù)緩存策略等。在大規(guī)模AI訓(xùn)練和數(shù)據(jù)湖場景實測中有突出的性能優(yōu)勢。
2、安全可靠
- 認證安全:支持阿里云上 STS 免密訪問和K8s原生的秘鑰加密
- 數(shù)據(jù)安全:checksum 校驗、客戶端數(shù)據(jù)加密等安全策略,保護云上數(shù)據(jù)安全和用戶信息等。
3、簡單易用
- 支持原生 k8s 環(huán)境,利用自定義資源定義,對接數(shù)據(jù)卷概念。使用部署流程簡單,可以開箱即用。
4、輕量級
- 底層基于 c++ 代碼,整體結(jié)構(gòu)輕量化,各種 OSS 訪問接口額外開銷較小。
?
4、JindoRuntime 性能怎么樣
我們使用 ImageNet 數(shù)據(jù)集基于 Kubernetes 集群并使用 Arena 在此數(shù)據(jù)集上訓(xùn)練 ResNet-50 模型,基于 JindoFS 的 JindoRuntime 在開啟本地緩存的情況下性能大幅度優(yōu)于開源 OSSFS,訓(xùn)練耗時縮短了76%,該測試場景會在后續(xù)文章中進行詳細介紹。
?
?
5、如何快速上手使用 JindoRuntime
使用 JindoRuntime 流程簡單,在準(zhǔn)備好基本 k8s 和 OSS 環(huán)境的條件下,您只需要耗費10分鐘左右時間即可部署好需要的 JindoRuntime 環(huán)境,您可以按照下面的流程進行部署。
1、創(chuàng)建命名空間
kubectl create ns fluid-system2、下載 fluid-0.5.0.tgz
3、使用 Helm 安裝 Fluid
helm install --set runtime.jindo.enabled=true fluid fluid-0.5.0.tgz4、查看 Fluid 的運行狀態(tài)
$ kubectl get pod -n fluid-system NAME READY STATUS RESTARTS AGE csi-nodeplugin-fluid-2mfcr 2/2 Running 0 108s csi-nodeplugin-fluid-l7lv6 2/2 Running 0 108s dataset-controller-5465c4bbf9-5ds5p 1/1 Running 0 108s jindoruntime-controller-654fb74447-cldsv 1/1 Running 0 108s其中 csi-nodeplugin-fluid-xx 的數(shù)量應(yīng)該與k8s集群中節(jié)點node的數(shù)量相同。
5、創(chuàng)建 dataset 和 JindoRuntime
在創(chuàng)建 dataset 之前,我們可以創(chuàng)建一個 secret 來保存 OSS 的 fs.oss.accessKeyId 和fs.oss.accessKeySecret 信息,避免明文暴露出來,k8s會對已創(chuàng)建的 secret 使用加密編碼,將key和secret信息填入mySecret.yaml文件中。
apiVersion: v1 kind: Secret metadata:name: mysecret stringData:fs.oss.accessKeyId: xxxfs.oss.accessKeySecret: xxx生成secret
kubectl create -f mySecret.yaml1、首先包含數(shù)據(jù)集及 ufs 的 dataset 信息,創(chuàng)建一個 Dataset CRD 對象,其中描述了數(shù)據(jù)集的來源。
2、接下來需要創(chuàng)建一個 JindoRuntime,相當(dāng)于啟動一個 JindoFS 的集群來提供緩存服務(wù)。
apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata:name: hadoop spec:mounts:- mountPoint: oss://<oss_bucket>/<bucket_dir>options:fs.oss.endpoint: <oss_endpoint> name: hadoopencryptOptions:- name: fs.oss.accessKeyIdvalueFrom:secretKeyRef:name: mysecretkey: fs.oss.accessKeyId- name: fs.oss.accessKeySecretvalueFrom:secretKeyRef:name: mysecretkey: fs.oss.accessKeySecret --- apiVersion: data.fluid.io/v1alpha1 kind: JindoRuntime metadata:name: hadoop spec:replicas: 2tieredstore:levels:- mediumtype: HDDpath: /mnt/disk1quota: 100Gihigh: "0.99"low: "0.8"1、mountPoint:oss://<oss_bucket>/<bucket_dir> 表示掛載UFS的路徑,路徑中不需要包含endpoint信息。
2、fs.oss.endpoint:oss bucket的endpoint信息,公網(wǎng)或內(nèi)網(wǎng)地址皆可。
3、replicas:表示創(chuàng)建 JindoFS 集群的 worker 的數(shù)量。
4、mediumtype: JindoFS 暫只支持HDD/SSD/MEM中的其中一種。
5、path:存儲路徑,暫只支持一塊盤,當(dāng)選擇MEM做緩存也需要一塊盤來存儲log等文件。
6、quota:緩存最大容量,單位Gi。
7、high:水位上限大小 / low: 水位下限大小。
kubectl create -f resource.yaml查看 dataset 的情況
$ kubectl get dataset hadoop NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE hadoop 210MiB 0.00B 180.00GiB 0.0% Bound 1h6、創(chuàng)建應(yīng)用容器體驗加速效果
您可以通過創(chuàng)建應(yīng)用容器來使用 JindoFS 加速服務(wù),或者進行提交機器學(xué)習(xí)作業(yè)來進行體驗相關(guān)功能。
接下來,我們創(chuàng)建一個應(yīng)用容器 app.yaml 來使用該數(shù)據(jù)集,我們將多次訪問同一數(shù)據(jù),并比較訪問時間來展示JindoRuntime 的加速效果。
apiVersion: v1 kind: Pod metadata:name: demo-app spec:containers:- name: demoimage: nginxvolumeMounts:- mountPath: /dataname: hadoopvolumes:- name: hadooppersistentVolumeClaim:claimName: hadoop使用kubectl完成創(chuàng)建
kubectl create -f app.yaml查看文件大小
$ kubectl exec -it demo-app -- bash $ du -sh /data/hadoop/spark-3.0.1-bin-hadoop2.7.tgz 210M /data/hadoop/spark-3.0.1-bin-hadoop2.7.tgz進行文件的cp觀察時間消耗了18s
$ time cp /data/hadoop/spark-3.0.1-bin-hadoop2.7.tgz /dev/nullreal 0m18.386s user 0m0.002s sys 0m0.105s查看此時 dataset 的緩存情況,發(fā)現(xiàn)210MB的數(shù)據(jù)已經(jīng)都緩存到了本地。
$ kubectl get dataset hadoop NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE hadoop 210.00MiB 210.00MiB 180.00GiB 100.0% Bound 1h為了避免其他因素(比如page cache)對結(jié)果造成影響,我們將刪除之前的容器,新建相同的應(yīng)用,嘗試訪問同樣的文件。由于此時文件已經(jīng)被 JindoFS 緩存,可以看到第二次訪問所需時間遠小于第一次。
kubectl delete -f app.yaml && kubectl create -f app.yaml進行文件的拷貝觀察時間,發(fā)現(xiàn)消耗48ms,整個拷貝的時間縮短了300倍
$ time cp /data/hadoop/spark-3.0.1-bin-hadoop2.7.tgz /dev/nullreal 0m0.048s user 0m0.001s sys 0m0.046s7、環(huán)境清理
1、刪除應(yīng)用和應(yīng)用容器
2、刪除 JindoRuntime
kubectl delete jindoruntime hadoop3、刪除 dataset
kubectl delete dataset hadoop以上通過一個簡單的例子完成 JindoFS on Fluid 的入門體驗和理解,并最后進行環(huán)境的清理,更多Fluid JindoRuntime 的功能使用后續(xù)文章會進行詳細介紹
作者:
王濤,花名揚禮,阿里巴巴計算平臺事業(yè)部 EMR 開發(fā)工程師,目前從事開源大數(shù)據(jù)存儲計算方面的開發(fā)和優(yōu)化工作。
車漾,花名必嘫,阿里巴巴云原生應(yīng)用平臺高級技術(shù)專家,從事 Kubernetes 和容器相關(guān)產(chǎn)品的開發(fā)。尤其關(guān)注利用云原生技術(shù)構(gòu)建機器學(xué)習(xí)平臺系統(tǒng),是 GPU 共享調(diào)度的主要作者和維護者。
原文鏈接
本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載
作者:
王濤,花名揚禮,阿里巴巴計算平臺事業(yè)部 EMR 開發(fā)工程師,目前從事開源大數(shù)據(jù)存儲計算方面的開發(fā)和優(yōu)化工作。
車漾,花名必嘫,阿里巴巴云原生應(yīng)用平臺高級技術(shù)專家,從事 Kubernetes 和容器相關(guān)產(chǎn)品的開發(fā)。尤其關(guān)注利用云原生技術(shù)構(gòu)建機器學(xué)習(xí)平臺系統(tǒng),是 GPU 共享調(diào)度的主要作者和維護者。
原文鏈接
本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載
?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的拥抱云原生,Fluid结合JindoFS :阿里云OSS加速利器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对话猿辅导:阿里云远程办公零信任落地创新
- 下一篇: 2021 年前端趋势预测