有奖:语音产品征文挑战赛火热进行中> HOT
文档中心 > 数据加速器 GooseFS

快速使用 GooseFSRuntime

使用 GooseFSRuntime 流程简单,在准备完基本 k8s 和对象存储(Cloud Object Storage,COS)环境的条件下,您只需要耗费10分钟左右即可部署完成所需的 GooseFSRuntime 环境,您可以按照下面的流程进行部署。

前提条件

已安装 Git。
已安装 Kubernetes 集群(version >= 1.14),并且支持 CSI 功能。为获得最佳实践,您可以直接在 腾讯云容器服务(Tencent Kubernetes Engine,TKE)部署。
已安装 kubectl(version >= 1.14)。关于 kubectl 安装和配置详情,请参见 Kubernetes 文档
已安装 Helm(version >= 3.0)。关于 Helm 3 安装和配置详情,请参见 HELM 文档
如下提供了本地安装包 fluid.tgz,您可以直接安装使用:
$ helm install fluid fluid.tgz
NAME: fluid
LAST DEPLOYED: Mon Mar 29 11:21:46 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
说明
helm install命令的一般格式是helm install <RELEASE_NAME> <SOURCE>,在上面的命令中,第一个fluid指定了安装的 release 名称(可自行更改),第二个fluid.tgz指定了helm chart 所在的路径。

操作步骤

1. 创建命名空间

kubectl create ns fluid-system

2. 下载 fluid

单击下载 fluid-0.6.0.tgz 安装包。
注意
您也可以前往 Fluid Releases 下载最新版本,但部分机器从中国境内访问该网站可能存在网络问题。

3. 使用 Helm 安装 Fluid

helm install --set runtime.goosefs.enabled=true fluid fluid-0.6.0.tgz

4. 查看 Fluid 的运行状态

$ 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
goosefsruntime-controller-564f59bdd7-49tkc 1/1 Running 0 108s
其中,csi-nodeplugin-fluid-xx 的数量应与 k8s 集群中节点 node 的数量相同。

5. GooseFS 缓存环境准备

(1)准备 COS 服务

您需要开通 COS,并完成存储桶的创建,创建指引可参见 创建存储桶

(2)准备测试样例数据

我们可以使用 Apache 镜像站点上的 Spark 相关资源文件作为演示中使用的远程文件。在实际使用当中,您也可以将这个远程文件修改为您的任意远程文件。
下载远程资源文件到本地
mkdir tmp
cd tmp
wget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.8/spark-2.4.8-bin-hadoop2.7.tgz
wget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2.tgz
上传本地文件到 COS 上 您可以使用腾讯云 COS 团队提供的客户端 COSCMD 或者腾讯云 COS 团队提供的 COS SDK,按照使用说明将本地下载的文件上传到 COS 的存储桶上。

(3)创建 dataset 和 GooseFSRuntime

i. 创建一个 resource.yaml 文件,里面包含如下内容:
包含数据集及 ufs 的 dataset 信息。
创建一个 Dataset CRD 对象,描述了数据集的来源,例如示例中的 test-bucket。
创建一个 GooseFSRuntime,相当于启动一个 GooseFS 的集群用于提供缓存服务。
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: hadoop
spec:
mounts:
- mountPoint: cosn://test-bucket/
options:
fs.cosn.userinfo.secretId: <COS_SECRET_ID>
fs.cosn.userinfo.secretKey: <COS_SECRET_KEY>
fs.cosn.bucket.region: <COS_REGION>
fs.cosn.impl: org.apache.hadoop.fs.CosFileSystem
fs.AbstractFileSystem.cosn.impl: org.apache.hadoop.fs.CosN
fs.cosn.userinfo.appid: <COS_APP_ID>
name: hadoop
?
---
apiVersion: data.fluid.io/v1alpha1
kind: GooseFSRuntime
metadata:
name: hadoop
spec:
replicas: 2
tieredstore:
levels:
- mediumtype: HDD
path: /mnt/disk1
quota: 100G
high: "0.9"
low: "0.8"
?
Dataset:
mountPoint:表示挂载 UFS 的路径,路径中不需要包含 endpoint 信息。
options:在 options 需要指定存储桶的必要信息,具体可参考 API 术语信息
fs.cosn.userinfo.secretId/fs.cosn.userinfo.secretKey:拥有权限访问该 COS 存储桶的密钥信息。
GooseFSRuntime:更多 API 可参考 api_doc.md
replicas:表示创建 GooseFS 集群节点的数量。
mediumtype: GooseFS 支持 HDD/SSD/MEM 三种类型缓存介质,提供多级缓存配置。
path:存储路径。
quota:缓存最大容量。
high:水位上限大小。
low:水位下限大小。
ii. 执行如下命令,创建 GooseFSRuntime:
kubectl create -f resource.yaml
iii. 查看部署的 GooseFSRuntime 情况,显示全部为 Ready 状态表示部署成功。
kubectl get goosefsruntime hadoop
NAME MASTER PHASE WORKER PHASE FUSE PHASE AGE
hadoop Ready Ready Ready 62m
iv. 查看 dataset 的情况,显示 Bound 状态表示 dataset 绑定成功。
$ kubectl get dataset hadoop
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE
hadoop 511MiB 0.00B 180.00GiB 0.0% Bound 1h
v. 查看 PV、PVC 创建情况,GooseFSRuntime 部署过程中会自动创建 PV 和 PVC。
kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/hadoop 100Gi RWX Retain Bound default/hadoop 58m
?
?
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/hadoop Bound hadoop 100Gi RWX 58m

6. 创建应用容器体验加速效果

您可以通过创建应用容器来使用 GooseFS 加速服务,或者进行提交机器学习作业来进行体验相关功能。
如下,创建一个应用容器 app.yaml 用于使用该数据集。我们将多次访问同一数据,并比较访问时间来展示 GooseFS 的加速效果。
apiVersion: v1
kind: Pod
metadata:
name: demo-app
spec:
containers:
- name: demo
image: nginx
volumeMounts:
- mountPath: /data
name: hadoop
volumes:
- name: hadoop
persistentVolumeClaim:
claimName: hadoop
i. 使用 kubectl 完成创建应用:
kubectl create -f app.yaml
ii. 查看文件大小:
$ kubectl exec -it demo-app -- bash
$ du -sh /data/hadoop/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2
210M /data/hadoop/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2
iii. 进行文件的 cp 观察时间消耗了18s:
$ time cp /data/hadoop/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2 /dev/null
?
real 0m18.386s
user 0m0.002s
sys 0m0.105s
iv. 查看此时 dataset 的缓存情况,发现210MB的数据已经都缓存到了本地。
$ 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
v. 为了避免其他因素(例如 page cache)对结果造成影响,我们将删除之前的容器,新建相同的应用,尝试访问同样的文件。由于此时文件已经被 GooseFS 缓存,可以看到第二次访问所需时间远小于第一次。
kubectl delete -f app.yaml && kubectl create -f app.yaml
vi. 进行文件的拷贝观察时间,发现消耗48ms,整个拷贝的时间缩短了300倍。
$ time cp /data/hadoop/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2 /dev/null
?
real 0m0.048s
user 0m0.001s
sys 0m0.046s

7. 环境清理

删除应用和应用容器
删除 GooseFSRuntime
kubectl delete goosefsruntime hadoop
删除 dataset
kubectl delete dataset hadoop
以上通过一个简单的例子完成 GooseFS on Fluid 的入门体验和学习,并最后进行环境的清理,更多 Fluid GooseFSRuntime 的功能介绍可参见 功能列表


http://www.vxiaotou.com