拥抱云原生,Fluid 结合 JindoFS:阿里云 OSS 加速利器

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
云原生网关 MSE Higress,422元/月
简介: Fluid 是一个开源的 Kubernetes 原生的分布式数据集编排和加速引擎,主要服务于云原生场景下的数据密集型应用,例如大数据应用、AI 应用等。通过 Kubernetes 服务提供的数据层抽象,可以让数据像流体一样在诸如 HDFS、OSS、Ceph 等存储源和 Kubernetes 上层云原生应用计算之间灵活高效地移动、复制、驱逐、转换和管理。

头图.png

作者| 王涛(扬礼)、车漾(必嘫)
来源|阿里巴巴云原生公众号

什么是 Fluid

Fluid 是一个开源的 Kubernetes 原生的分布式数据集编排和加速引擎,主要服务于云原生场景下的数据密集型应用,例如大数据应用、AI 应用等。通过 Kubernetes 服务提供的数据层抽象,可以让数据像流体一样在诸如 HDFS、OSS、Ceph 等存储源和 Kubernetes 上层云原生应用计算之间灵活高效地移动、复制、驱逐、转换和管理。而具体数据操作对用户透明,用户不必再担心访问远端数据的效率、管理数据源的便捷性,以及如何帮助 Kuberntes 做出运维调度决策等问题。用户只需以最自然的 Kubernetes 原生数据卷方式直接访问抽象出来的数据,剩余任务和底层细节全部交给 Fluid 处理。

Fluid 项目当前主要关注数据集编排和应用编排这两个重要场景。数据集编排可以将指定数据集的数据缓存到指定特性的 Kubernetes 节点,而应用编排将指定该应用调度到可以或已经存储了指定数据集的节点上。这两者还可以组合形成协同编排场景,即协同考虑数据集和应用需求进行节点资源调度。

1.png

然后介绍 Fluid 中 Dataset 的概念,数据集是逻辑上相关的一组数据的集合,会被运算引擎使用,比如大数据的 Spark,AI 场景的 TensorFlow,而关于数据集智能的应用和调度会创造工业界的核心价值。Dataset 的管理实际上也有多个维度,比如安全性,版本管理和数据加速。

我们希望从数据加速出发,对于数据集的管理提供支持。在 Dataset 上面,我们通过定义 Runtime 这样一个执行引擎来实现数据集安全性,版本管理和数据加速等能力,Runtime 定义了一系列生命周期的接口,可以通过实现这些接口来支持数据集的管理和加速,目前 Fluid 中支持的 Runtime 有 AlluxioRuntime 和 JindoRuntime 两种。Fluid 的目标是为 AI 与大数据云原生应用提供一层高效便捷的数据抽象,将数据从存储抽象出来从而达到如下功能:

  • 通过数据亲和性调度和分布式缓存引擎加速,实现数据和计算之间的融合,从而加速计算对数据的访问。
  • 将数据独立于存储进行管理,并且通过 Kubernetes 的命名空间进行资源隔离,实现数据的安全隔离。
  • 将来自不同存储的数据联合起来进行运算,从而有机会打破不同存储的差异性带来的数据孤岛效应。

什么是 JindoRuntime

如果要了解 Fluid 的 JindoRuntime,先要介绍 JindoFS。它是 JindoRuntime 的引擎层。

JindoFS 是阿里云针对 OSS 开发的自研大数据存储优化引擎,完全兼容 Hadoop 文件系统接口,给客户带来更加灵活、高效的计算存储方案,目前已验证支持阿里云 EMR 中所有的计算服务和引擎:Spark、Flink、Hive、MapReduce、Presto、Impala 等。JindoFS 有两种使用模式,块存储(Block)模式和缓存(Cache)模式。Block 模式将文件内容以数据块的形式存放在 OSS 上并在本地可选择使用数据备份来进行缓存加速,使用本地的 namespace 服务管理元数据,从而通过本地元数据以及块数据构建出文件数据。Cache 模式将文件存储在 OSS 上,该模式兼容现有的 OSS 文件系统,用户可以通过 OSS 访问原有的目录结构以及文件,同时该模式提供数据以及元数据的缓存,加速用户读写数据的性能。使用该模式的用户无需迁移数据到 OSS,可以无缝对接现有 OSS 上的数据,在元数据同步方面用户可以根据不同的需求选择不同的元数据同步策略。

在 Fluid 中,JindoRuntime 也是使用 JindoFS 的 Cache 模式进行远端文件的访问和缓存,如您需要在其他环境单独使用 JindoFS 获得访问 OSS 的能力,您也可以下载我们的 JindoFS SDK 按照使用文档进行部署使用。JindoRuntime 来源于阿里云 EMR 团队自研 JindoFS 分布式系统,是支撑 Dataset 数据管理和缓存的执行引擎实现。Fluid 通过管理和调度 Jindo Runtime 实现数据集的可见性、弹性伸缩、数据迁移、计算加速等。在 Fluid 上使用和部署 JindoRuntime 流程简单、兼容原生 K8s 环境、可以开箱即用。深度结合对象存储特性,使用 Navite 框架优化性能,并支持免密、checksum 校验等云上数据安全功能。

JindoRuntime 的优势

JindoRuntime 提供对 Aliyun OSS 对象存储服务的访问和缓存加速能力,并且利用 FUSE 的 POSIX 文件系统接口实现可以像本地磁盘一样轻松使用 OSS 上的海量文件,具有以下特点:

1. 性能卓越

  • OSS 的读写性能突出:深度结合 OSS 进行读写效率和稳定性的增强,通过 native 层优化对 OSS 访问接口,优化冷数据访问性能,特别是小文件读写。
  • 分布式缓存策略丰富:支持单 TB 级大文件缓存、元数据缓存策略等。在大规模 AI 训练和数据湖场景实测中有突出的性能优势。

2. 安全可靠

  • 认证安全:支持阿里云上 STS 免密访问和 K8s 原生的秘钥加密。
  • 数据安全:checksum 校验、客户端数据加密等安全策略,保护云上数据安全和用户信息等。

3. 简单易用

支持原生 K8s 环境,利用自定义资源定义,对接数据卷概念。使用部署流程简单,可以开箱即用。 

4. 轻量级

底层基于 c++ 代码,整体结构轻量化,各种 OSS 访问接口额外开销较小。

JindoRuntime 性能怎么样

我们使用 ImageNet 数据集基于 Kubernetes 集群并使用 Arena 在此数据集上训练 ResNet-50 模型,基于 JindoFS 的 JindoRuntime 在开启本地缓存的情况下性能大幅度优于开源 OSSFS,训练耗时缩短了 76%,该测试场景会在后续文章中进行详细介绍。

2.png

如何快速上手使用 JindoRuntime

使用 JindoRuntime 流程简单,在准备好基本 K8s 和 OSS 环境的条件下,您只需要耗费 10 分钟左右时间即可部署好需要的 JindoRuntime 环境,您可以按照下面的流程进行部署。

  • 创建命名空间
kubectl create ns fluid-system

**

  • 使用 Helm 安装 Fluid
helm install --set runtime.jindo.enabled=true fluid fluid-0.5.0.tgz
  • 查看 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
jindoruntime-controller-654fb74447-cldsv     1/1     Running   0          108s

其中 csi-nodeplugin-fluid-xx 的数量应该与 K8s 集群中节点 node 的数量相同。

  • 创建 dataset 和 JindoRuntime

在创建 dataset 之前,我们可以创建一个 secret 来保存 OSS 的 fs.oss.accessKeyId 和 fs.oss.accessKeySecret 信息,避免明文暴露出来,K8s 会对已创建的 secret 使用加密编码,将 key 和 secret 信息填入 mySecret.yaml 文件中。

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
stringData:
  fs.oss.accessKeyId: xxx
  fs.oss.accessKeySecret: xxx

生成 secret:

kubectl create -f mySecret.yaml

创建一个 resource.yaml 文件里面包含两部分:

  1. 首先包含数据集及 ufs 的 dataset 信息,创建一个 Dataset CRD 对象,其中描述了数据集的来源。
  2. 接下来需要创建一个 JindoRuntime,相当于启动一个 JindoFS 的集群来提供缓存服务。
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: hadoop
      encryptOptions:
        - name: fs.oss.accessKeyId
          valueFrom:
            secretKeyRef:
              name: mysecret
              key: fs.oss.accessKeyId
        - name: fs.oss.accessKeySecret
          valueFrom:
            secretKeyRef:
              name: mysecret
              key: fs.oss.accessKeySecret
---
apiVersion: data.fluid.io/v1alpha1
kind: JindoRuntime
metadata:
  name: hadoop
spec:
  replicas: 2
  tieredstore:
    levels:
      - mediumtype: HDD
        path: /mnt/disk1
        quota: 100Gi
        high: "0.99"
        low: "0.8"
  1. mountPoint:oss://<oss_bucket>/<bucket_dir> 表示挂载 UFS 的路径,路径中不需要包含 endpoint 信息。
  2. fs.oss.endpoint:oss bucket 的 endpoint 信息,公网或内网地址皆可。
  3. replicas:表示创建 JindoFS 集群的 worker 的数量。
  4. mediumtype:JindoFS 暂只支持 HDD/SSD/MEM 中的一种。
  5. path:存储路径,暂只支持一块盘,当选择 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   1h
  • 创建应用容器体验加速效果

您可以通过创建应用容器来使用 JindoFS 加速服务,或者进行提交机器学习作业来进行体验相关功能。

接下来,我们创建一个应用容器 app.yaml 来使用该数据集,我们将多次访问同一数据,并比较访问时间来展示 JindoRuntime 的加速效果。

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

使用 kubectl 完成创建:

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/null

real  0m18.386s
user  0m0.002s
sys 0m0.105s

查看此时 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

为了避免其他因素(比如 page cache)对结果造成影响,我们将删除之前的容器,新建相同的应用,尝试访问同样的文件。由于此时文件已经被 JindoFS 缓存,可以看到第二次访问所需时间远小于第一次。

kubectl delete -f app.yaml && kubectl create -f app.yaml

进行文件的拷贝观察时间,发现消耗 48ms,整个拷贝的时间缩短了 300 倍。

$ time cp /data/hadoop/spark-3.0.1-bin-hadoop2.7.tgz /dev/null

real  0m0.048s
user  0m0.001s
sys 0m0.046s
  • 环境清理

    • 删除应用和应用容器
    • 删除 JindoRuntime
kubectl delete jindoruntime hadoop
  • 删除 dataset
kubectl delete dataset hadoop

以上通过一个简单的例子完成 JindoFS on Fluid 的入门体验和理解,并最后进行环境的清理,更多 Fluid JindoRuntime 的功能使用后续文章会进行详细介绍。

  • Fluid 项目 GitHub 地址

https://github.com/fluid-cloudnative/fluid

  • Fluid 项目主页

http://pasa-bigdata.nju.edu.cn/fluid/index.html

  • 社区交流钉群

3.png

作者简介

王涛,花名扬礼,阿里巴巴计算平台事业部 EMR 开发工程师,目前从事开源大数据存储计算方面的开发和优化工作。
**
车漾,花名必嘫,阿里巴巴云原生应用平台高级技术专家,从事 Kubernetes 和容器相关产品的开发。尤其关注利用云原生技术构建机器学习平台系统,是 GPU 共享调度的主要作者和维护者。

点击访问“Kubernetes与云原生应用更多开源实践”大讲堂,4 次开源技术直播, 60+ 节 Kubernetes 经典课程,3 本云原生电子书,将前沿的容器技术和开源实践一网打尽!

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
3月前
|
Cloud Native 测试技术 开发者
终于!我找到了开发的得力助手!阿里云天池云原生编程挑战赛参赛攻略
在比赛过程中,通义灵码插件成为了我开发工作的得力助手。这个插件提供了智能代码补全和错误提示功能,大大提高了我的编码效率。尤其是通义灵码能够实时分析代码,给出优化建议,让我避免了很多潜在的错误。
216 64
|
2月前
|
人工智能 安全 Cloud Native
阿里云云原生安全能力全线升级,护航百万客户云上安全
【重磅发布】9月20日,在杭州云栖大会上,阿里云宣布云原生安全能力全线升级,首次发布云原生网络检测与响应产品NDR(Network Detection Response,简称NDR)。同时,阿里云还宣布将持续增加免费的安全防护能力,帮助中小企业客户以极低投入完成基础的云上安全风险治理。
176 15
|
2月前
|
Cloud Native Java 对象存储
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
展望未来,随着5G、边缘计算等新技术的兴起,微服务架构的设计理念将会更加深入人心,Spring Cloud和Netflix OSS也将继续引领技术潮流,为企业带来更为高效、灵活且强大的解决方案。无论是对于初创公司还是大型企业而言,掌握这些前沿技术都将是在激烈市场竞争中脱颖而出的关键所在。
64 0
|
14天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 10 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
24天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
1月前
|
运维 Cloud Native 数据可视化
阿里云云原生应用组装平台BizWorks满分通过最新评估
阿里云BizWorks满分通过《基于云计算的业务组装平台能力成熟度模型》评测,获得优秀级(最高等级),广东移动联合阿里云BizWorks团队开展的组装式应用实践获得第三届“鼎新杯”数字化转型应用优秀案例一等奖。
193 3
|
1月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 09 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
1月前
|
人工智能 自然语言处理 关系型数据库
阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成
近日,阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成。
|
1月前
|
Cloud Native Java 对象存储
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
48 1
|
1月前
|
运维 Cloud Native 持续交付
云原生技术解析:从IO出发,以阿里云原生为例
【10月更文挑战第24天】随着互联网技术的不断发展,传统的单体应用架构逐渐暴露出扩展性差、迭代速度慢等问题。为了应对这些挑战,云原生技术应运而生。云原生是一种利用云计算的优势,以更灵活、可扩展和可靠的方式构建和部署应用程序的方法。它强调以容器、微服务、自动化和持续交付为核心,旨在提高开发效率、增强系统的灵活性和可维护性。阿里云作为国内领先的云服务商,在云原生领域有着深厚的积累和实践。
57 0
下一篇
无影云桌面