美文网首页
Spark-http://spark.apache.org/do

Spark-http://spark.apache.org/do

作者: 催化剂 | 来源:发表于2021-01-27 17:21 被阅读0次

硬件配置

Spark开发人员收到的一个常见问题是如何为其配置硬件。虽然正确的硬件取决于情况,但我们提出以下建议。

储存系统

由于大多数Spark作业可能必须从外部存储系统(例如Hadoop File System或HBase)读取输入数据,因此将其尽可能靠近该系统很重要。我们建议以下内容:

如果可能,请在与HDFS相同的节点上运行Spark。最简单的方法是建立一个Spark 独立模式集群同一节点上,并配置Spark和Hadoop的内存和CPU的使用情况,以避免干扰(Hadoop的,相关的选项是 mapred.child.java.opts为每个任务的内存和mapreduce.tasktracker.map.tasks.maximum 和mapreduce.tasktracker.reduce.tasks.maximum的任务数) 。或者,您可以在Mesos或 Hadoop YARN之类的通用集群管理器上运行Hadoop和Spark 。

如果不可能,请在与HDFS相同的局域网中的不同节点上运行Spark。

对于像HBase这样的低延迟数据存储,可能最好在存储系统以外的其他节点上运行计算作业,以避免干扰。

本地磁盘

尽管Spark可以在内存中执行很多计算,但它仍使用本地磁盘来存储不适合RAM的数据,并保留阶段之间的中间输出。我们建议每个节点有4-8个磁盘,配置为不使用RAID(仅作为单独的安装点)。在Linux中,使用noatime选项安装磁盘以减少不必要的写入。在Spark中,将 变量配置spark.local.dir为本地磁盘的逗号分隔列表。如果您正在运行HDFS,可以使用与HDFS相同的磁盘。

内存

通常,Spark可以在每台计算机8 GiB到数百GB的内存中运行良好。在所有情况下,我们建议仅为Spark分配最多75%的内存;其余的留给操作系统和缓冲区高速缓存。

您需要多少内存将取决于您的应用程序。要确定您的应用程序对特定数据集大小使用了多少,请在Spark RDD中加载部分数据集,然后使用Spark监视UI(http://<driver-node>:4040)的“存储”选项卡查看其在内存中的大小。请注意,内存使用量受存储级别和序列化格式的影响很大-请参阅调整指南以获取有关减少内存使用量的提示。

最后,请注意,Java VM在运行超过200 GiB的内存时并不总是表现良好。如果您购买的计算机具有更多的RAM,则可以在单个节点中启动多个执行程序。在Spark的独立模式下,工作人员负责根据其可用的内存和内核启动多个执行程序,并且每个执行程序都将在单独的Java VM中启动。

网络

根据我们的经验,当数据存储在内存中时,许多Spark应用程序都是网络绑定的。使用10 Gb或更高的网络是使这些应用程序更快的最佳方法。对于“分布式缩减”应用程序(例如分组依据,缩减依据和SQL连接)尤其如此。在任何给定的应用程序中,您都可以从应用程序的监视UI(http://<driver-node>:4040)查看Spark在网络上的混洗数据量。

CPU核

Spark可以很好地扩展到每台计算机数十个CPU内核,因为它在线程之间执行的共享最少。您可能应该在每台计算机上至少配置8-16个内核。根据工作负载的CPU成本,您可能还需要更多:一旦数据存储在内存中,大多数应用程序就会受到CPU或网络的限制。

相关文章

网友评论

      本文标题:Spark-http://spark.apache.org/do

      本文链接:https://www.haomeiwen.com/subject/devazktx.html