spark部署所需硬件资源

  • 存储系统

    由于大多数Spark作业可能必须从外部存储系统(例如Hadoop文件系统或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可以在每台机器上运行8 GB到数百GB的内存。在所有情况下,我们建议仅为Spark分配最多75%的内存; 剩下的就是操作系统和缓冲区缓存了。

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

    最后,请注意Java VM并不总是表现出超过200 GB的RAM。如果购买RAM大于此值的计算机,则可以为每个节点运行多个工作JVM。在Spark的独立模式下,您可以使用SPARK_WORKER_INSTANCES变量in conf/spark-env.sh和每个worker的核心数设置每个节点的worker数SPARK_WORKER_CORES

  • 本地磁盘

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

  • 网络

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

  • CPU核心

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

     

参考:

Hardware Provisioning

spark集群部署-硬件配置官方建议

Apache Spark: The number of cores vs. the number of executors

猜你喜欢

转载自blog.csdn.net/zilong230905/article/details/85013411