分布式计算框架:Spark、Dask、Ray

news2024/12/23 23:07:05

目录

什么是分布式计算

分布式计算哪家强:Spark、Dask、Ray

2 选择正确的框架

2.1 Spark

2.2 Dask

2.3 Ray


什么是分布式计算

分布式计算是一种计算方法,和集中式计算是相对的。

随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成。

分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率。

分布式计算哪家强:Spark、Dask、Ray

1 历史
1.1 Apache Spark
Spark是由Matei Zaharia于2009年在加州大学伯克利分校的AMPLab启动的。这个项目的主要目的是加快分布式大数据任务的执行,在那个时候,这些任务是由Hadoop MapReduce处理的。MapReduce在设计时考虑到了可扩展性和可靠性,但性能和易用性一直不是它的强项。MapReduce需要不断将中间结果存储到磁盘,这是Spark要克服的关键障碍。Spark通过引入弹性分布式数据集(RDD)范式,并利用内存缓存和惰性计算的优势,能够比MapReduce减少几个数量级的延迟。这使Spark确立了其作为大规模、容错、并行化数据处理的事实标准的主导地位。该项目通过添加GraphX(用于分布式图形处理)、MLlib(用于机器学习)、SparkSQL(用于结构化和半结构化数据)等功能得到进一步加强。 值得注意的是,Spark是用Scala编写的,后来又增加了对Python和R的支持,因此与它互动一般不会有Pythonic的感觉。理解RDD范式和Spark中的工作方式需要一点时间来适应,但这对任何熟悉Hadoop生态系统的人来说通常不是问题。

1.2 Dask
Dask是一个用于并行计算的开源库,它在2015年发布,所以与Spark相比,它相对较新。该框架最初是由Continuum Analytics(现在的Anaconda Inc.)开发的,他们是许多其他开源Python包的创造者,包括流行的Anaconda Python发行。Dask的最初目的只是为了将NumPy并行化,这样它就可以利用具有多个CPU和核心的工作站计算机。与Spark不同,Dask开发中采用的最初设计原则之一是 "无发明"。这一决定背后的想法是,使用Dask的工作应该让使用Python进行数据分析的开发者感到熟悉,而且升级时间应该最小。根据其创造者的说法,Dask的设计原则经过多年的发展,现在正被开发成一个用于并行计算的通用库。

最初围绕并行NumPy的想法得到进一步发展,包括一个完整而轻量级的任务调度器,可以跟踪依赖关系,并支持大型多维数组和矩阵的并行化。后来又增加了对Pandas DataFrames和scikit-learn并行化的支持。这使该框架能够缓解Scikit中的一些主要痛点,如计算量大的网格搜索和太大无法完全容纳在内存中的工作流程。最初的单机并行化目标后来被分布式调度器的引入所超越,这使Dask能够在多机多TB的问题空间中舒适地运行。

1.3 Ray
Ray是加州大学伯克利分校的另一个项目,其使命是 "简化分布式计算"。Ray由两个主要部分组成--Ray Core,它是一个分布式计算框架,而Ray Ecosystem,广义上讲是一些与Ray打包的特定任务库(例如Ray Tune--一个超参数优化框架,RaySGD用于分布式深度学习,RayRLib用于强化学习,等等)。

Ray与Dask类似,它让用户能够以并行的方式在多台机器上运行Python代码。然而,与Dask不同的是,Ray并不模仿NumPy和Pandas的API--它的主要设计目标不是为数据科学工作做一个落地的替代品,而是为Python代码的并行化提供一个通用的低层次框架。Ray更像是一个通用的集群和并行化框架,可以用来构建和运行任何类型的分布式应用。由于Ray Core的架构方式,它经常被认为是一个构建框架的框架。也有越来越多的项目与Ray集成,以利用加速的GPU和并行计算。 spaCy、Hugging Face和XGBoost都是引入Ray互操作性的第三方库的例子。

2 选择正确的框架


这里没有简单明了的方法来选择 "最佳 "框架,就像每个复杂的问题一样,答案在很大程度上取决于我们具体工作流程中的背景和许多其他因素。我们需要逐个看看这三个框架,分析它们的优劣势,同时考虑到各种常见的使用情况进行选择。

2.1 Spark


优点:

成熟稳定:Spark 的原始版本发布于2014年5月,是比较成熟的技术。 商业支持:大量的公司提供商业支持/服务。 处理大数据集:适用于针对大型数据集进行数据工程/ ETL 类型的任务。 提供高级 SQL 抽象层(Spark SQL)。 弊端:

需要学习新的执行模型和API,学习曲线陡峭。 调试困难。 复杂的架构,仅靠IT部门很难维护,因为适当的维护需要了解计算范式和Spark的内部运作(如内存分配)。 缺少丰富的数据可视化生态系统。 没有内置的GPU加速,需要RAPIDS加速器来访问GPU资源。

2.2 Dask


优点:

纯Python框架,非常容易上手。 直接支持Pandas DataFrames和NumPy数组。 通过Datashader轻松实现对数十亿行的探索性数据分析。 提供Dask Bags--它是PySpark RDD的Python版本,具有map、filter、groupby等功能。 Dask能够带来令人印象深刻的性能改进。 2020年6月,Nvidia使用RAPIDS、Dask和UCX在16个DGX A100系统(128个A100 GPU)上进行TPCx-BB测试,取得了惊人的结果。但是,需要谨慎对待,因为2021年1月,TPC强制Nvidia将该结果下架,因为它们违反了TPC的公平使用政策。

弊端:

缺乏商业支持(但有几家公司已开始在此领域的工作,例如Coiled和QuanSight)。 没有内置的GPU支持,依赖于RAPIDS进行GPU加速。

2.3 Ray


优点:

最小的集群配置 最适合于计算密集型工作负载。已经有证据表明,Ray在某些机器学习任务上的表现优于Spark和Dask,如NLP、文本规范化和其他。此外,Ray的工作速度比Python标准多处理快10%左右,即使是在单节点上也是如此。 因为Ray正被越来越多地用于扩展不同的ML库,所以你可以以可扩展的、并行的方式一起使用所有的ML库。另一方面,Spark将你限制在它的生态系统中可用的框架数量明显减少。 独特的基于actor的抽象,多个任务可以在同一个集群上异步工作,从而实现更好的利用率(相比之下,Spark的计算模型不太灵活,基于并行任务的同步执行)。 弊端:

相对较新(2017年5月首次发布)。 不太适合分布式数据处理。Ray没有用于分区数据的内置原语。该项目刚刚引入了Ray Datasets,但这是一个全新的补充,仍然非常新且基础。 对GPU的支持仅限于调度和预留。由远程函数来实际利用GPU(通常通过外部库,如TensorFlow和PyTorch)。 从这三个框架的优缺点出发,我们可以提炼出以下选择标准:

如果工作负载是以数据为中心的,主要是ETL/预处理方面的工作,那么我们最好选择Spark。特别是如果该组织拥有Spark API的机构知识。

Dask/Ray的选择并不那么明确,但一般的规则是,Ray旨在加速任何类型的Python代码,而Dask是面向数据科学特定的工作流程。 为了让事情变得更加复杂,还有Dask-on-Ray项目,它允许你在不使用Dask分布式调度器的情况下运行Dask工作流。 为了更好地理解Dask-on-Ray试图填补的空白,我们需要看一下Dask框架的核心组件。这些是集合抽象(DataFrames,数组等),任务图(DAG,表示类似于Apache Spark DAG的操作集合),以及调度器(负责执行Dask图)。分布式调度器是Dask中可用的调度器之一,它负责协调分布在多台机器上的若干工作进程的行动。这个调度器很好,因为它设置简单,保持最小的延迟,允许点对点的数据共享,并支持比简单的map-reduce链复杂得多的工作流。另一方面,分布式调度程序并非没有缺点,它的缺点包括:

它是一个单点故障--分布式调度器没有高可用性机制,因此如果它发生故障,整个集群需要重置,所有正在进行的任务都会丢失。 它是用Python编写的,这使得它易于安装和调试,但也会引入通常与Python搭配使用的标准性能考虑因素。 Client API是为数据科学家设计的,并不适合从高可用性的生产基础设施中调用(例如,它假定客户是长期存在的,可能从Jupyter会话中与集群一起工作)。 它对有状态执行提供的支持很少,所以很难实现容错的流水线。 它可能会成为瓶颈,并且不能本地扩展。 相比之下,容错和性能是深深嵌入Ray调度器设计中的原则。它是完全分散的(没有瓶颈),提供更快的数据共享(通过Apache Plasma),各个调度器是无状态的(容错),支持有状态的Actor等。这使得在Ray集群上运行Dask任务的吸引力非常明显,也是Dask-on-Ray调度器存在的理由。

 

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

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

相关文章

Boost电路实战详解!(高效率同步整流,PID闭环追踪)

文章目录 寄语什么是BOOST电路BOOST同步升压电路设计要求设计方案驱动电路电压采样电路 总体电路代码实物图总结 寄语 提示:若想实战演练,请先熟悉文章操作流程哦,不然会有危险!! 我建了一个群,分享我个人…

【业务功能篇82】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-进阶实战

四、ElasticSearch进阶 https://www.elastic.co/guide/en/elasticsearch/reference/7.4/getting-started-search.html 1.ES中的检索方式 在ElasticSearch中支持两种检索方式 通过使用REST request URL 发送检索参数(uri检索参数)通过使用 REST request body 来发送检索参数…

人力资源小程序的设计与开发步骤

在当前信息化时代,小程序成为了各行各业提升用户体验和服务效率的重要渠道。人力资源部门也可以通过定制开发人力资源小程序来提升招聘、培训、员工福利等方面的工作效率。接下来,我们将介绍人力资源小程序定制系统开发的具体流程。 首先,我们…

章节 1:入门React.js -《React.js手把手教程:从初学者到实战高手》- 第一部分:React.js基础

《React.js手把手教程:从初学者到实战高手》 第一部分:React.js基础 章节 1:入门React.js 了解React.js 在我们开始探索React.js的奇妙世界之前,让我们先来认识一下这个“人人都在谈论”的家伙。你可以把React.js想象成是一个全…

【校招VIP】产品思维分析之面试新的功能点设计

考点介绍: 这种题型是面试里出现频度最高,也是难度最大的一种,需要面试者对产品本身的功能、扩展性以及行业都有一定的了解。而且分析时间较短,需要一定的产品能力和回答技巧。 『产品思维分析之面试新的功能点设计』相关题目及解…

既简单又高效,一款新型软件开发利器来了,让编程门槛不再是障碍

软件开发现在已经成为各行各业不可或缺的一部分。 无论是大型企业还是小型团队,都需要依赖软件来提高工作效率、优化用户体验,甚至是推动业务的发展。然而,对于非专业程序员来说,开发一款自己的软件似乎是一项遥不可及的任务。 幸…

idea建立java maven javaweb项目,建立maven基本项目

1.创建maven项目 2.在src/main 目录下建立webapp/WEB-INF/web.xml文件 src/main/webapp/WEB-INF/web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w…

Java轻松开发自定义注解

注解开发 元注解 Target(ElementType) 修饰的这个注解的使用范围&#xff0c;即被描述的注解可以用在哪里。 Target(ElementType.TYPE)——接口、类、枚举、注解 Target(ElementType.FIELD)——字段、枚举的常量 Target(ElementType.METHOD)——方法 Target(ElementT…

antd5:图片上传接口参数

使用场景&#xff0c;后端给了一个上传文件的接口/api/file/upload,方法类型为post,参数为{file: binary,type:string}. 上传文件需要设置请求头content-type. 项目使用的是umi4antd5 请求拦截便在app.ts文件写。 export const request: RequestConfig {baseURL: /api,time…

【MTK平台】根据kernel log分析wifi 打开的时候流程

一 概要: 本文主要讲解根据kernel log分析下 当前路径下(vendor/mediatek/kernel_modules/connectivity/wlan/core/gen4m/)wifi打开的时候代码流程 二. Log分析: 先看Log 2.1)在Framework层WifiManager.java 方法中,做了一个标记,可以精准的确认时间 这段log可以看出…

【业务功能篇81】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-入门实战

ElasticSearch 一、ElasticSearch概述 1.ElasticSearch介绍 ES 是一个开源的高扩展的分布式全文搜索引擎&#xff0c;是整个Elastic Stack技术栈的核心。它可以近乎实时的存储&#xff0c;检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;…

SAP SD (Sales Distribution)简要介绍

目录 前言 一、SD的企业结构 二、SD 模块的特性 三、SD下的子模块/组件Components 前言 SAP SD代表销售和分销&#xff0c;它是核心模块之一&#xff0c;处理从收到产品订单到将产品交付给客户的各种业务流程&#xff0c;以完成客户订单。SAP R/3的主要优点是与内部和外部…

leetcode503. 下一个更大元素 II 单调栈

思路&#xff1a; 与之前 739、1475 单调栈的问题如出一辙&#xff0c;唯一不同的地方就是对于遍历完之后。栈中元素的处理&#xff0c;之前的栈中元素因无法找到符合条件的值&#xff0c;直接加入vector中。而这里需要再重头遍历一下数组&#xff0c;找是否有符合条件的&…

UG\NX二次开发 使用录制功能录制操作记录时,如何设置默认的开发语言?

文章作者&#xff1a;里海 来源网站&#xff1a;王牌飞行员_里海_里海NX二次开发3000例,C\C,Qt-CSDN博客 简介&#xff1a; NX二次开发使用BlockUI设计对话框时&#xff0c;如何设置默认的代码语言&#xff1f; 效果&#xff1a; 方法&#xff1a; 依次打开“文件”->“实用…

CV:边缘检测的算法包含 Prewitt、Sobel、Laplacian 和 Canny。

目录 1. 边缘检测&#xff08;Prewitt&#xff09; 2. 边缘检测&#xff08;Sobel&#xff09; 3. 边缘检测&#xff08;Laplacian&#xff09; 3. 边缘检测&#xff08;Canny&#xff09; 边缘检测的算法包含 Prewitt、Sobel、Laplacian 和 Canny。 人在图像识别上具有难…

Hystrix: 服务熔断

开始搭建8001服务的熔断机制 创建子模块 同样拷一份pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schem…

Checkstyle安装、使用

Checkstyle简介 Checkstyle是SourceForge下的一个项目&#xff0c;官网&#xff1a; https://checkstyle.sourceforge.io/ 在官网有详细的说明。 Checkstyle是一个开发工具&#xff0c;可以帮助开发者自动检查java代码是否遵循编程规范&#xff0c;将开发者从枯燥繁琐的手工…

scroll-view 组件里的 scroll-into-view 属性实例

微信小程序的scroll-view组件中&#xff0c;scroll-into-view 属性可以指定滚动到指定id的位置。 <scroll-view class"content" scroll-y scroll-into-view"{{ intoIndex }}" scroll-with-animation>intoIndex 值应为某子元素id&#xff08;id不能以…

在腾讯云服务器OpenCLoudOS系统中安装svn(有图详解)

1. 安装svn yum -y install subversion 安装成功&#xff1a; 2. 创建数据根目录及仓库 mkdir -p /usr/local/svn/svnrepository 创建test仓库&#xff1a; svnadmin create /usr/local/svn/test test仓库创建成功&#xff1a; 3. 修改配置test仓库 cd /usr/local/svn/te…

JAVA坦克大战游戏v3

JAVA坦克大战游戏v3 素材 bomb_3.gif bomb_2.gif bomb_1.gif 项目结构 游戏演示 MyTankGame3.java /*** 功能:坦克游戏的5.0[]* 1.画出坦克.* 2.我的坦克可以上下左右移动* 3.可以发射子弹,子弹连发(最多5)* 4.当我的坦克击中敌人坦克时&#xff0c;敌人就消失(爆炸的效…