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

简介: Fluid 是一个开源的 Kubernetes 原生的分布式数据集编排和加速引擎,主要服务于云原生场景下的数据密集型应用。在 Fluid 上使用和部署 JindoRuntime 实现数据集的可见性、弹性伸缩、数据迁移、计算加速等,并流程简单、兼容原生 k8s 环境、可以开箱即用。同时深度结合对象存储特性,使用navite框架优化性能,并支持免密、checksum校验等云上数据安全功能。

1、什么是 Fluid

Fluid 是一个开源的 Kubernetes 原生的分布式数据集编排和加速引擎,主要服务于云原生场景下的数据密集型应用,例如大数据应用、AI应用等。通过 Kubernetes 服务提供的数据层抽象,可以让数据像流体一样在诸如 HDFS、OSS、Ceph 等存储源和 Kubernetes 上层云原生应用计算之间灵活高效地移动、复制、驱逐、转换和管理。而具体数据操作对用户透明,用户不必再担心访问远端数据的效率、管理数据源的便捷性,以及如何帮助 Kuberntes 做出运维调度决策等问题。用户只需以最自然的 Kubernetes 原生数据卷方式直接访问抽象出来的数据,剩余任务和底层细节全部交给 Fluid 处理。Fluid 项目当前主要关注数据集编排和应用编排这两个重要场景。数据集编排可以将指定数据集的数据缓存到指定特性的 Kubernetes 节点,而应用编排将指定该应用调度到可以或已经存储了指定数据集的节点上。这两者还可以组合形成协同编排场景,即协同考虑数据集和应用需求进行节点资源调度。

 

 

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

 

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

1、通过数据亲和性调度和分布式缓存引擎加速,实现数据和计算之间的融合,从而加速计算对数据的访问。

2、将数据独立于存储进行管理,并且通过 Kubernetes 的命名空间进行资源隔离,实现数据的安全隔离。

3、将来自不同存储的数据联合起来进行运算,从而有机会打破不同存储的差异性带来的数据孤岛效应。

 

2、什么是 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 校验等云上数据安全功能。

 

3、JindoRuntime 的优势

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

1、性能卓越

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

2、安全可靠

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

3、简单易用

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

4、轻量级

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

 

4、JindoRuntime 性能怎么样

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

 

 

5、如何快速上手使用 JindoRuntime

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

1、创建命名空间

kubectl create ns fluid-system

2、下载 fluid-0.5.0.tgz

3、使用 Helm 安装 Fluid

helm install --set runtime.jindo.enabled=true fluid fluid-0.5.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
jindoruntime-controller-654fb74447-cldsv     1/1     Running   0          108s

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

5、创建 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: xxxfs.oss.accessKeySecret: xxx

生成secret

kubectl create -f mySecret.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: 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信息,公网或内网地址皆可。

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

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

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

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

apiVersion: v1
kind: Pod
metadata:name: demo-app
spec:containers:- name: demoimage: nginxvolumeMounts:- mountPath: /dataname: hadoopvolumes:- name: hadooppersistentVolumeClaim: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/nullreal    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/nullreal    0m0.048s
user    0m0.001s
sys 0m0.046s

7、环境清理

1、删除应用和应用容器

2、删除 JindoRuntime

kubectl delete jindoruntime hadoop

3、删除 dataset

kubectl delete dataset hadoop

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

作者:

王涛,花名扬礼,阿里巴巴计算平台事业部 EMR 开发工程师,目前从事开源大数据存储计算方面的开发和优化工作。

车漾,花名必嘫,阿里巴巴云原生应用平台高级技术专家,从事 Kubernetes 和容器相关产品的开发。尤其关注利用云原生技术构建机器学习平台系统,是 GPU 共享调度的主要作者和维护者。

原文链接

本文为阿里云原创内容,未经允许不得转载

作者:

王涛,花名扬礼,阿里巴巴计算平台事业部 EMR 开发工程师,目前从事开源大数据存储计算方面的开发和优化工作。

车漾,花名必嘫,阿里巴巴云原生应用平台高级技术专家,从事 Kubernetes 和容器相关产品的开发。尤其关注利用云原生技术构建机器学习平台系统,是 GPU 共享调度的主要作者和维护者。

原文链接

本文为阿里云原创内容,未经允许不得转载

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【观点】传统企业如何在数字化时代实现进化?

简介&#xff1a; 我们看到的数字化的大多数场景集中于日常商业消费活动&#xff0c;背后其实是超越个体行为的场景变革。 究竟是谁在承载这个时代一步步走进数字化场景&#xff1f;又是谁通过数字化技术与解决方案帮助他们实现场景变革&#xff1f;这个过程是什么样的&#xf…

网易数帆发布轻舟低代码平台2.0,聚焦中等复杂度企业级应用

编辑 | 宋 慧 出品 | CSDN云计算 头图 | 轻舟低代码平台2.0发布会现场 8月26日&#xff0c;网易数帆正式发布轻舟低代码应用开发平台2.0版本&#xff08;以下简称“轻舟低代码平台”&#xff09;&#xff0c;以全新的可视化编程语言为特色&#xff0c;针对中等复杂度的企业级应…

宝塔 开启_宝塔面板安装完的一些列操作

前言新安装的宝塔会有很多地方需要配置&#xff0c;如果懂的大佬可以跳过&#xff0c;如果是小白可以按照辉哥的教程一步步操作&#xff0c;辉哥是以虚拟机进行操作的&#xff0c;但是服务器也是一样的道理&#xff01;安全入口因为现在使用宝塔面板的人数在激增。所以为了避免…

黑灰产攻击洪峰来袭,企业如何守住自己的钱袋子?

简介&#xff1a; 风控大考最佳实践 根据阿里云历史行业风险治理相关数据显示&#xff0c;未经风险管控的自然流量中&#xff0c;约三分之一比例属于疑似黑灰产的高风险行为&#xff1b;而在建立合理的风控指标监控体系并采取风险防控手段后&#xff0c;高风险用户比例下降至3%…

服务网格的最佳实践

简介&#xff1a; 服务网格是用于处理服务间通信的专用基础设施层。它负责通过包含现代云原生应用程序的复杂服务拓扑来可靠地传递请求。 微服务发展的这几年&#xff0c;新的技术和概念层出不穷&#xff0c;这些技术的引入本质上都是在围绕服务稳定性和业务开发效率提升&#…

高性能开发,别点,发际线要紧!

作者&#xff1a;轩辕之风O来源&#xff1a;编程技术宇宙-前言-程序员经常要面临的一个问题就是&#xff1a;如何提高程序性能&#xff1f;这篇文章&#xff0c;我们循序渐进&#xff0c;从内存、磁盘I/O、网络I/O、CPU、缓存、架构、算法等多层次递进&#xff0c;串联起高性能…

如何打造一个高性能的前端智能推理引擎

简介&#xff1a; 什么是前端智能推理引擎又该如何打造和应用呢&#xff1f; 什么是前端智能推理引擎 在前端智能推理引擎之前&#xff0c;我们先来说一下什么是”端智能”。 端智能&#xff08;On-Device Machine Learning&#xff09;是指把机器学习的应用放在端侧做。这里…

115配额怎么增加_笔电、平板接口少怎么办,ORICO八合一多功能扩展坞助你一臂之力...

现在笔记本电脑大多都往轻薄的外形上发展&#xff0c;保持性能的前提下可以增加移动的便捷性&#xff0c;但是弊端同样明显&#xff0c;那就是牺牲掉了一部分常用接口。比如我手上这部戴尔XPS&#xff0c;左右两侧加起来只有4个可怜的接口&#xff0c;其中还包括一个SD槽&#…

OpenYurt:延伸原生 Kubernetes 到边缘场景下的落地实践

简介&#xff1a; 随着云原生技术的逐步成熟&#xff0c;阿里云容器服务团队在具体落地实践过程中不断探索云原生技术的应用边界。同时随着物联网和 5G 的迅猛发展&#xff0c;传统的边缘计算架构已经不能满足业务发展的需要。 如何基于云原生技术构建新一代的边缘计算平台成为…

对象存储,为什么那么火?

作者|小枣君 来源|鲜枣课堂引言上期文章&#xff08;链接&#xff1a;关于存储技术的最强入门科普&#xff09;&#xff0c;小枣君给大家详细介绍了数据存储技术的基本知识&#xff0c;其中重点对DAS、SAN和NAS技术进行了对比分析。我们知道&#xff0c;在很长的一段时间里&…

使用react实现select_React笔记——核心概念:9.表单

1、受控组件在 React 中&#xff0c;可变状态(mutable state)通常保存在组件的 state 属性中&#xff0c;并且只能通过使用 setState()来更新。state&#xff1a;唯一数据源渲染表单的 React 组件还控制着用户输入过程中表单发生的操作。被 React 以这种方式控制取值的表单输入…

压测场景下的 TIME_WAIT 处理

简介&#xff1a; 压测场景下的 TIME_WAIT 处理 1. 序 某专有云项目具备压测场景&#xff0c;在Windows的压测机上用 LoadRunner 进行业务的压力测试&#xff0c;压测运行一段时间后出现大量端口无法分配的报错。 其实通过问题描述&#xff0c;以及 Windows的报错信息基本确定…

DataX在数据迁移中的应用

简介&#xff1a; DataX在数据迁移中的应用 1. DataX定义 首先简单介绍下datax是什么。 DataX是阿里巴巴集团内被广泛使用的离线数据同步工具/平台&#xff0c;实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS…

华为发布《绿色5G白皮书》,定义绿色5G网络八大技术方向

全球“碳达峰、碳中和”已成主流趋势&#xff0c;为了助力全球运营商绿色网络“双碳”行动计划的达成&#xff0c;在华为首届无线媒体沙龙上&#xff0c;华为无线网络SRAN产品线总裁马洪波发表了“绿色5G&#xff0c;E2四化八大方向&#xff0c;共赢双碳未来”主题演讲&#xf…

判断是否包含大写字符_Python最常用的数据类型中字符串基础函数使用知识点讲解...

字符串是 pthon 中最常用的数据类型。我们可以使用单引号、双引号或者三对单双引号来创建字符串。创建字符串很简单&#xff0c;只要为变量分配一个值即可。Python 的字符串有什么内建函数可以使用&#xff1f;len()方法返回对象(字符、列表、元组等)长度或项目个数。每个字符一…

Arthas 使用的各类方式

简介&#xff1a; Arthas 是阿里巴巴开源的 Java 诊断工具。让我们能够在线排查项目发生的问题。除了知道它的存在之外&#xff0c;我们也需要知道我们如何去安装使用它&#xff0c;以便于提高我们日常开发解决 BUG 的效率。 方案介绍 方案一&#xff1a;本地直接运行 往往最…

antd autoplay按f12才会轮播_涨知识了!原来这才是电脑键盘上,F1到F12的正确用法...

在这个快节奏的时代&#xff0c;工作效率可以说是非常重要的&#xff0c;所以熟练掌握电脑就是提高效率的好方法&#xff01;那如何快速的掌握电脑呢&#xff1f;这就不妨先了解下键盘上F1-F12的正确用法哦&#xff0c;每个都是提高效率的快捷键。F1&#xff1a;获取帮助如果你…

新型数据中心需要什么样的存储

作者&#xff1a;浪潮信息首席架构师 叶毓睿 智算时代的序幕已经拉开&#xff0c;互联的万物&#xff0c;一切皆计算机。智慧计算融入到千行万业的图景&#xff0c;正在徐徐铺开。这是一个数据成为生产要素的时代&#xff0c;智慧计算将劳动者由人变成了人AI&#xff0c;将数据…

王者荣耀服务器未响应8月5日苹果,王者荣耀:世冠小组赛8月5日前瞻预测

14:00 深圳DYG vs GOG深圳DYG在上周的比赛遭遇两连败&#xff0c;目前排在A组倒数第二位。队伍进行人员轮换后&#xff0c;Giao在比赛中的发挥可圈可点&#xff0c;但其他队员的状态都下滑明显。辅助位星宇从春季赛的状态就一般&#xff0c;到本次世冠仍然没有提升&#xff0c;…

多中心容灾实践:如何实现真正的异地多活?

简介&#xff1a; 在异地多活的实现上&#xff0c;数据能够在三个及以上中心间进行双向同步&#xff0c;才是解决真正异地多活的核心技术所在。本文基于三中心且跨海外的场景&#xff0c;分享一种多中心容灾架构及实现方式&#xff0c;介绍几种分布式ID生成算法&#xff0c;以及…