Vineyard 加入 CNCF Sandbox,将继续瞄准云原生大数据分析领域

简介: Vineyard 是一个专为云原生环境下大数据分析场景中端到端工作流提供内存数据共享的分布式引擎,我们很高兴宣布 Vineyard 在 2021 年 4 月 27 日被云原生基金会(CNCF)TOC 接受为沙箱(Sandbox)项目。

头图.png

作者 | Vineyard 团队
来源 | 阿里巴巴云原生公众号

Vineyard 是一个专为云原生环境下大数据分析场景中端到端工作流提供内存数据共享的分布式引擎,我们很高兴宣布 Vineyard 在 2021 年 4 月 27 日被云原生基金会(CNCF)TOC 接受为沙箱(Sandbox)项目。

Vineyard 项目开源地址:
https://github.com/alibaba/v6d

项目介绍

现有的大数据分析场景中,对于端到端任务,不同的子任务之间通常使用例如 HDFS、S3、OSS 这样的分布式文件系统或对象存储系统,来共享任务之间的中间数据,这种方式在运行效率和研发效率上存在诸多问题,以下图所示的一个风控作业工作流为例:

1.jpg

  1. 工作流中不同任务之间为了共享中间数据,前一个任务将结果写入文件系统,完成之后,后一个再将文件读出作为输入,这个过程带来了额外的序列化及反序列化、内存拷贝、以及网络、IO 的开销,我们从历史任务中观察到有超过 60% 的任务为此花费了 40% 以上的执行时间。
  2. 对于生产环境,为了高效地解决某一个特定范式的问题往往会引入一个新系统(例如分布式图计算),但这样的系统往往难以直接与工作流中的其他系统无缝衔接,需要很多重复的 IO、数据格式转换和适配的研发工作。
  3. 使用外部文件系统共享数据给工作流带来了额外的中断,因为往往只有当一个任务完全写完所有结果,下一个任务才能开始读取和计算,这使得跨任务的流水线并行无法被应用。
  4. 现有的分布式文件系统在共享中间数据时,特别是在云原生环境下,并没有很好的处理分布式数据的位置问题,造成网络开销的浪费,从而降低端到端执行效率。

为了解决现有大数据分析工作流中存在的上述问题,我们设计和实现了分布式内存数据共享引擎 Vineyard。

2.jpg

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 的结构。

3.png

2. 云原生环境中数据与任务的协同调度

对于一个真实部署的大数据分析流水线,仅仅有任务之间的数据共享是远远不够的。在云环境中,一个端到端流水线中包含的多个子任务在被 Kubernetes 调度时仅仅考虑了需要的资源约束,连续的两个任务的 co-locate 无法保证,在两个任务之间共享中间结果时仍然有数据迁移引入的网络开销,如下图,在运行 Task B 时,因为两个任务的 Pod 没有对齐,数据分片 A3、A4 需要被迁移到 Pod 所在的 Vineyard 实例上。

4.png

对此,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 的演示视频:
https://www.youtube.com/watch?v=vPbF1l5nwwQ&list=PLj6h78yzYM2NoiNaLVZxr-ERc1ifKP7n6&t=585

未来展望

Vineyard 已经作为分布式科学计算引擎 Mars 和一站式图计算系统 GraphScope 的存储引擎,Vineyard 助力大数据分析任务离不开与云原生社区的紧密互动,未来Vineyard 会进一步地完善与社区其他项目如 Kubeflow、Fluid 等的集成,助力更多云上大数据分析任务。

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

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

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

相关文章

殷浩详解DDD:领域层设计规范

简介: 在一个DDD架构设计中,领域层的设计合理性会直接影响整个架构的代码结构以及应用层、基础设施层的设计。但是领域层设计又是有挑战的任务,特别是在一个业务逻辑相对复杂应用中,每一个业务规则是应该放在Entity、ValueObject …

融资 6 亿元后,端点科技将致力于类SaaS化软件服务

据艾瑞咨询最新发布《2021 中国企业级 SaaS 行业研究报告》显示,在疫情催化下,2020 年 SaaS 市场增速飞快,市场规模达538亿元,同比增长48.7%。 随着数字化转型步伐加快,企业对 SaaS 接受度提升,应用场景从…

稳定性之故障应急处理流程

简介: 尽管可以通过稳定性体系建设,来避免出现生产系统故障。但是仍然无法彻底避免一点风险都不会产生,当稳定性风险产生后,怎么快速协调组织,缩短故障时长,科学的流程呢? 作者 | 金喜 来源 | 阿…

如何限制浏览器使用_论如何优雅地使用chrome 浏览器

chrome 浏览器目前已经算得上是在浏览器市场独占鳌头了,就连它的最强对手IE也不得不低下头颅改用Chromium内核,这让chrome 浏览器更是没有对手了,但是你真的了解这个你时时刻刻都在用到的浏览器吗?今天装糊涂先森就来教你如何优雅…

520,一份给程序员的“硬核”脱单秘籍

简介: 各位,520快乐! 今天是个粉红色的日子,我们来聊聊和技术无关的“技术活”,比如:“如何表白?”当技术人碰上心动的姑娘,他的浪漫开关就打开了。 各位,520快乐&#…

95后架构师晒出工资单:狠补了这个,真香...

前段时间看见某95后阿里P7晒出工资单,我是真酸了……只能狠补一下技术了。Java 一面基本上都是基础题,同样是 CURD 的活,谁更熟练要谁,比如下面这个Java面试手册,八股文越熟练越容易通过 Java 面试。这份资料内容涵盖极…

阿里云 EDAS 3.0 助力唱鸭提升微服务幸福感

简介: EDAS 3.0 提供的微服务治理,很好的支持了唱鸭 APP 实现微服务应用的发布、监控、管理等日常业务场景。作为运维侧的重要平台和开框架的提供者,EDAS 3.0 帮助用户可以更专注业务。微服务架构升级后,业务具备水平扩展能力&…

Serverless:这真的是未来吗?(二)

简介: 在关于无服务器的第二篇文章中,我们将讨论一些更广泛的问题。再次强调,我们并不是要做硬性规定。我们想提出一些观点,以促进所有利益相关者之间的讨论。许多说所有应用程序都将是无服务器的应用程序的人并未大规模运行其应用…

删除超过10亿用户的数据,Facebook 关闭面部识别系统

整理 | 祝涛 出品 | CSDN(ID:CSDNnews)Facebook周二宣布,计划在本月关闭其已有10年历史的面部识别系统,并删除超过10亿用户的面部扫描数据,原因是这项技术的使用引发了越来越多的社会担忧。Facebook新…

参与 Apache 顶级开源项目的 N 种方式,Apache Dubbo Samples SIG 成立!

简介: 一说到参与开源项目贡献,一般大家的反应都是代码级别的贡献,总觉得我的代码被社区合并了,我才算一个贡献者,这是一个常见的错误认知。其实,在一个开源社区中有非常多的角色是 non-code contributor&a…

重磅 | 《中国移动云网一体产品白皮书(2021)》发布!

11月1日—11月3日,2021中国移动全球合作伙伴大会在广州隆重召开。11月2日,中国移动云能力中心副总经理孙少陵发表了《移动云技术内核2.0》主旨演讲,并在会上发布了《中国移动云网一体产品白皮书(2021)》。云网一体是市…

Flink 最佳实践之使用 Canal 同步 MySQL 数据至 TiDB

简介: 本文将介绍如何将 MySQL 中的数据,通过 Binlog Canal 的形式导入到 Kafka 中,继而被 Flink 消费的案例。 一. 背景介绍 本文将介绍如何将 MySQL 中的数据,通过 Binlog Canal 的形式导入到 Kafka 中,继而被 F…

参数校验优雅实践

简介: 希望本文可以帮助到大家,可以用一种优雅方式接入参数校验,保护系统解放自身,从你我做起! 作者 | 中野 来源 | 阿里技术公众号 一 不厌其烦的 if else? 参数校验,为了保护自己的代码,一般…

【实践案例】Databricks 数据洞察 Delta Lake 在基智科技(STEPONE)的应用实践

简介: 获取更详细的 Databricks 数据洞察相关信息,可至产品详情页查看:https://www.aliyun.com/product/bigdata/spark 作者 高爽,基智科技数据中心负责人 尚子钧,数据研发工程师 1、基智科技 北京基智科技有限公司…

腾讯王巨宏:开源是一项长跑,与开发者共赢开源未来

11月4日,2021腾讯数字生态大会Techo Day技术峰会在武汉召开,腾讯首次披露了在5大技术领域的开源新进展,并回顾了腾讯开源的四大变化。 腾讯公司副总裁王巨宏表示,云与开源共生共荣、相互支撑,共同为用户和开发者创造价…

【阿里云EMR实战篇】以EMR测试集群版本为例,详解 Flink SQL Client 集成 Hive 使用步骤

简介: 以测试集群版本为例(EMR-4.4.1)—— Flink SQL Client 集成 Hive 使用文档 作者:林志成,阿里云EMR产品团队技术支持,拥有多年开源大数据经验 1、以测试集群版本为例(EMR-4.4.1&#xff…

java求极限值_高等数学——讲透求极限两大方法,夹逼法与换元法

本文始发于个人公众号:TechFlow今天的文章聊聊高等数学当中的极限,我们跳过极限定义以及一些常用极限计算的部分。我想对于一些比较常用的函数以及数列的极限,大家应该都非常熟悉。大部分比较简单的函数或者数列,我们可以很直观地…

Kubernetes 上调试 distroless 容器

作者 | Addo Zhang来源 | 云原生指北Distroless 镜像Distroless 容器,顾名思义使用 Distroless 镜像[1]作为基础镜像运行的容器。"Distroless" 镜像只包含了你的应用程序以及其运行时所需要的依赖。不包含你能在标准 Linxu 发行版里的可以找到的包管理器、…

技术干货 | 如何在 Library 中使用/依赖 mPaaS?

简介: 在使用 mPaaS 框架过程中,有时需要复用模块。复用时需要按照使用 Module 依赖的方式添加模块。 使用场景 在使用 mPaaS 框架过程中,有时需要复用模块。复用时需要按照使用 Module 依赖的方式添加模块。本文以将复用 mPaaS 扫码组件的…

Java单元测试技巧之PowerMock

简介: 高德的技术大佬向老师在谈论方法论时说到:“复杂的问题要简单化,简单的问题要深入化。” 这句话让我感触颇深,这何尝不是一套编写代码的方法——把一个复杂逻辑拆分为许多简单逻辑,然后把每一个简单逻辑进行深入…