云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

虚拟主机_域名注册商查看_高性能

小七 141 0

在单节点计算机上测试apachespark

apachespark已经成为分布式环境中大数据处理的事实上的统一分析引擎。然而,我们看到更多的用户选择在一台机器上运行Spark,通常是他们的笔记本电脑,来处理小到大的数据集,而不是选择一个大的Spark集群。这一选择主要是因为以下原因:一个单一的、统一的API,可以从笔记本电脑上的"小数据"扩展到集群上的"大数据"Polyglot编程模式,支持Python、R、Scala和JavaANSI SQL支持与PyData工具紧密集成,例如通过Pandas用户定义函数实现Pandas虽然上述情况可能显而易见,但用户通常会惊讶地发现:在单个节点上安装Spark不需要配置(只需下载并运行它)。由于并行性,Spark通常比单节点PyData工具更快。Spark的内存消耗更低,处理的数据比笔记本电脑的内存大,因为它不需要在处理前将整个数据集加载到内存中。PyData工具和管道为apachespark的易用性和性能做出了贡献。例如,Pandas的数据框架API启发了Spark,另一个例子是Spark 2.3中的Pandas udf通过结合Spark和Pandas显著提高了PySpark的性能。在本博客中,我们将演示使用PySpark进行单节点计算的优点,并分享我们的观察结果。通过实验,我们将展示为什么您可能希望使用PySpark而不是Pandas来处理超过单节点计算机内存的大数据集。在笔记本电脑上安装Apache Spark尽管Spark最初是为分布式数据处理而设计的,但是为了便于本地开发,Spark已经付出了很多努力,为新的Spark开发人员提供了一个易于实验的平台:只需下载tarball,解压它,就可以立即开始使用它,而无需任何设置。例如,以下命令将下载Spark tarball并启动PySpark:wget公司 spark-2.3.0-bin-hadoop2.7.tgzcd spark-2.3.0-bin-hadoop2.7垃圾箱/垃圾桶更好的是,Spark也可以在PyPI、Homebrew和Conda上使用,并且可以使用一个命令进行安装:pip安装pyspark自制安装apache spark单节点性能英特尔已经有几年没能提高CPU的时钟频率了。最新的芯片在核心数量方面正在不断扩大,而不是使单个核更强大、频率更高。因此,笔记本电脑或工作站有16个核,服务器有64个甚至128个核是很常见的。以这种方式,这些多核单节点机器的工作更像一个分布式系统,而不是传统的单核机器。我们经常听到分布式系统比单节点系统慢,当数据适合一台机器的内存时。通过比较Spark和Pandas使用常见SQL查询的内存使用和性能,我们发现情况并非总是如此。我们使用三个常见的SQL查询来显示Spark和Pandas的单节点比较:查询1。从商店销售额中选择最大价格问题2。从商店销售中选择count(不同的ss_customer_sk)查询3。从门店销售组中选择sum(ss_-net_-profit)BY-ss-shore-sk为了证明上述情况,我们测量了Pandas在244gb内存的单个节点上可以加载的最大数据大小(Parquet和CSV),并比较了三个查询的性能。设置和配置硬件我们使用具有以下设置的虚拟机:*CPU核数:32个虚拟核(16个物理核),Intel Xeon CPU E5-2686 v4@2.30GHz*系统内存:244 GB*用于随机播放的总本地磁盘空间:4 x 1900 GB NVMe SSD软件操作系统:Ubuntu 16.04Spark:本地集群模式下的apachespark 2.3.0熊猫版本:0.20.3Python版本:2.7.12Pypark和熊猫我们的基准测试的输入数据集是来自TPC-DS的表"store_sales",它有23列,数据类型是Long/Double。可扩展性Pandas需要大量的内存资源来加载数据文件。下面的测试使用Pandas和Pyarrow加载10到270的表"store_sales",并记录Python进程的最大驻留集大小。如下图所示,随着数据大小的线性增加,单节点计算机上的驻留集大小(RSS)也会线性增加。我们还测试了Pandas在i3.8xlige实例上无法加载的最小文件大小。对于Spark来说,很容易从笔记本电脑上的小数据集扩展到集群上只有一个API的"大数据"。即使是在一个节点上,Spark的操作员也会将数据泄漏到磁盘上,如果磁盘不适合内存,就可以在任何大小的数据上运行良好。性能基准测试涉及对Parquet文件格式的表"store_sales"(从10到260)运行SQL查询。PySpark在本地集群模式下运行,内存为10GB,线程数为16个。我们观察到,随着输入数据大小的增加,PySpark在资源有限的情况下获得了更好的性能结果,而Pandas崩溃并无法处理大于39GB的拼花文件。由于在所有核心上并行执行,PySpark在测试中比Pandas快,即使PySpark在运行查询之前没有将数据缓存到内存中。为了证明这一点,我们还使用不同数量的线程在PySpark上运行了基准测试,输入数据规模为250(磁盘上大约35GB)。Pypark和熊猫UDF另一方面,构建在apachearrow之上的Pandas UDF为Python开发人员提供了高性能,无论是在单节点机器上还是在分布式集群上使用Pandas UDF。在apachespark2.3中引入的Two-Sigma的lijin演示了Pandas UDF与PySpark的紧密集成。他将Pandas UDF与Spark一起使用,比较标准Python UDF row at time和Pandas UDF计算累积概率的基准结果以及其他计算函数。Pandas udf用于矢量化标量操作。考虑使用PySpark中的标量Pandas UDF,使用scipy包计算正态分布N(0,1)中某个值的累积概率。将熊猫作为pd导入从scipy import stats@熊猫(双倍)def cdf(v):返回pd系列(stats.norm.cdf(v) )##现在在Spark数据帧中使用Pandas UDF#df.WITH列("累积概率",cdf(df.v))作为Pandas UDF,此代码比常规Python UDF快得多。下表表明,在所使用的所有计算函数中,Pandas udf的性能比Python udf每次行的性能要好得多。cdf部分图表摘自Pandas UDF博客结论总之,我们概述了为什么有些用户选择在一台机器上运行Spark。在几次Spark的发行中,熊猫已经做出了贡献,并与Spark很好地融合在一起。一个巨大的胜利是熊猫UDF。事实上,由于Pandas API与Spark数据帧相似,许多开发人员经常将两者结合起来,因为它们之间的互操作非常方便。对于具有超过单个节点内存的大数据集的单节点分析,Spark通过多核并行和更好的流水线执行引擎提供更快的运行时间和更大的可伸缩性。您可以访问用于此基准测试的源代码https://github.com/databricks/benchmarks/tree/master/pandas免费试用Databricks。今天就开始吧