Spark集群硬件配置
2017-05-02 13:34
316 查看
本文翻译自Spark官方网站,原文链接:http://spark.apache.org/docs/latest/hardware-provisioning.html
部分内容采用意译的方式翻译,如有疏漏错误之处,欢迎批评指正。
Spark集群硬件配置
Spark开发人员经常遇到的一个问题是如何为Spark集群配置硬件。 虽然正确的硬件配置将取决于具体情况,但我们给出以下几点建议。
存储系统
因为大多数Spark作业可能需要从外部存储系统(例如Hadoop文件系统或HBase)读取输入数据,所以要让Spark计算引擎尽可能靠近数据持久层。我们建议如下:
1、 如果可能,直接在HDFS相同的节点上运行Spark。最简单的方法是在相同的集群上以standalone模式部署Spark集群,并配置Spark和Hadoop的内存和CPU使用率以避免干扰(对于Hadoop,用mapred.child.java.opts配置每个任务的可用内存,用mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum限制任务的个数)。 或者,您可以在Mesos或Hadoop YARN这样的常见集群管理器上运行Hadoop和Spark。
2、 如果无法做到第一点,请尽量使运行Spark的节点与HDFS处于相同的局域网中。
3、 对于具有低延迟特性的持久层(如HBase),优先在与存储系统不同的节点上运行计算任务以避免干扰。
本地磁盘
虽然Spark可以在内存中执行大量的计算,但它仍然可能会使用本地磁盘来存储不适用于RAM的数据(译者注:有关数据持久化级别的叙述详见“编程指南”),以及在stage之间保留中间输出。我们建议每个节点配置4-8个磁盘,不需要配置RAID(磁盘阵列)(即每个磁盘单独的挂载即可)。在Linux中,使用noatime选项挂载磁盘,以减少不必要的写入操作。
在Spark中,可以将spark.local.dir变量配置为多个本地磁盘的地址,多个地址之间以逗号分隔。如果您正在运行HDFS,最好使用与HDFS存储数据相同的磁盘。
内存
一般来说,Spark可以在每台机器配置8 GB到数百GB内存的集群上良好运行。我们强烈建议为Spark分配的内存容量不大于机器总内存容量的75%;确保为操作系统和缓冲区留下足够的内存。
最终需要多少内存将取决于您的应用程序。要确定应用程序在处理特定数据集时所需的内存容量,请在Spark RDD中加载部分数据集,并使用Spark的UI(http:// <driver-node>:4040)的“Storage”选项卡查看其占用的内存大小。请注意,内存使用受到存储级别和序列化格式的极大影响 - 有关如何减少内存使用的技巧,请参阅“优化指南”。
最后,请注意,当内存容量超过200GB时Java 虚拟机的性能表现会不稳定。如果您购买的RAM大于200G,则可以为每个节点运行多个worker JVM。在Spark的standalone模式下,您可以通过conf / spark-env.sh中的SPARK_WORKER_INSTANCES变量设置每个节点运行的worker进程数,以及通过SPARK_WORKER_CORES变量设置每个worker可用的cpu核心数。
网络
根据我们的经验,当数据已经存储在内存中时,很多Spark应用程序的性能瓶颈在于网络的传输速率。使用带宽大于10G的网络是使这些应用程序运行更快速的最佳方式。对于涉及“分布式聚合(distributedreduce)”的操作,如group-bys,,reduce-bys, and SQL join等操作尤其如此。 在应用程序运行的过程中,您可以从应用程序的监视UI(http:// <driver-node>:4040)中查看Spark应用在网络上传输了多少数据量。
CPU核心
Spark在每台机器配置几十个CPU内核的集群上也能够有很好的表现,因为Spark极少跨越线程进行数据处理。您应该为每台机器至少配置8-16个内核。根据您的Spark作业的CPU负载情况,您可能还需要更高的配置:一旦数据已经在内存中,大多数应用程序的性能瓶颈在于CPU或网络带宽。
部分内容采用意译的方式翻译,如有疏漏错误之处,欢迎批评指正。
Spark集群硬件配置
Spark开发人员经常遇到的一个问题是如何为Spark集群配置硬件。 虽然正确的硬件配置将取决于具体情况,但我们给出以下几点建议。
存储系统
因为大多数Spark作业可能需要从外部存储系统(例如Hadoop文件系统或HBase)读取输入数据,所以要让Spark计算引擎尽可能靠近数据持久层。我们建议如下:
1、 如果可能,直接在HDFS相同的节点上运行Spark。最简单的方法是在相同的集群上以standalone模式部署Spark集群,并配置Spark和Hadoop的内存和CPU使用率以避免干扰(对于Hadoop,用mapred.child.java.opts配置每个任务的可用内存,用mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum限制任务的个数)。 或者,您可以在Mesos或Hadoop YARN这样的常见集群管理器上运行Hadoop和Spark。
2、 如果无法做到第一点,请尽量使运行Spark的节点与HDFS处于相同的局域网中。
3、 对于具有低延迟特性的持久层(如HBase),优先在与存储系统不同的节点上运行计算任务以避免干扰。
本地磁盘
虽然Spark可以在内存中执行大量的计算,但它仍然可能会使用本地磁盘来存储不适用于RAM的数据(译者注:有关数据持久化级别的叙述详见“编程指南”),以及在stage之间保留中间输出。我们建议每个节点配置4-8个磁盘,不需要配置RAID(磁盘阵列)(即每个磁盘单独的挂载即可)。在Linux中,使用noatime选项挂载磁盘,以减少不必要的写入操作。
在Spark中,可以将spark.local.dir变量配置为多个本地磁盘的地址,多个地址之间以逗号分隔。如果您正在运行HDFS,最好使用与HDFS存储数据相同的磁盘。
内存
一般来说,Spark可以在每台机器配置8 GB到数百GB内存的集群上良好运行。我们强烈建议为Spark分配的内存容量不大于机器总内存容量的75%;确保为操作系统和缓冲区留下足够的内存。
最终需要多少内存将取决于您的应用程序。要确定应用程序在处理特定数据集时所需的内存容量,请在Spark RDD中加载部分数据集,并使用Spark的UI(http:// <driver-node>:4040)的“Storage”选项卡查看其占用的内存大小。请注意,内存使用受到存储级别和序列化格式的极大影响 - 有关如何减少内存使用的技巧,请参阅“优化指南”。
最后,请注意,当内存容量超过200GB时Java 虚拟机的性能表现会不稳定。如果您购买的RAM大于200G,则可以为每个节点运行多个worker JVM。在Spark的standalone模式下,您可以通过conf / spark-env.sh中的SPARK_WORKER_INSTANCES变量设置每个节点运行的worker进程数,以及通过SPARK_WORKER_CORES变量设置每个worker可用的cpu核心数。
网络
根据我们的经验,当数据已经存储在内存中时,很多Spark应用程序的性能瓶颈在于网络的传输速率。使用带宽大于10G的网络是使这些应用程序运行更快速的最佳方式。对于涉及“分布式聚合(distributedreduce)”的操作,如group-bys,,reduce-bys, and SQL join等操作尤其如此。 在应用程序运行的过程中,您可以从应用程序的监视UI(http:// <driver-node>:4040)中查看Spark应用在网络上传输了多少数据量。
CPU核心
Spark在每台机器配置几十个CPU内核的集群上也能够有很好的表现,因为Spark极少跨越线程进行数据处理。您应该为每台机器至少配置8-16个内核。根据您的Spark作业的CPU负载情况,您可能还需要更高的配置:一旦数据已经在内存中,大多数应用程序的性能瓶颈在于CPU或网络带宽。
相关文章推荐
- 【Spark学习】Apache Spark集群硬件配置要求
- spark集群部署-硬件配置官方建议
- spark集群部署-硬件配置官方建议
- Spark集群硬件配置参考
- 【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群-配置Hadoop-伪分布模式并运行Wordcount(2)
- Spark教程-构建Spark集群-配置Hadoop单机模式并运行Wordcount(1)
- 实验室集群硬件配置记录
- Spark在Hadoop集群上的配置(spark-1.1.0-bin-hadoop2.4)
- 为Hadoop集群选择合适的硬件配置
- Hadoop2.2集群安装配置-Spark集群安装部署
- Hadoop集群硬件配置
- 最新版spark1.1.0集群安装配置
- Spark集群之Spark history server额外配置
- Spark添加/更改集群节点需要修改的配置文件
- Spark硬件配置推荐
- 【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群-配置Hadoop单机模式并运行Wordcount(2)
- 【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群-配置Hadoop单机模式并运行Wordcount(1)
- 最新版spark1.1.0集群安装配置
- spark集群参数配置理解
- 基于Infiniband高性能集群硬件配置方案