Spark调优系列之硬件要求

估计所有的spark开发者都很关心spark的硬件要求。恰当的硬件配置需要具体情况具体分析,浪尖在这里给出以下建议。

一,存储系统

因为因为大多数Spark工作可能需要从外部存储系统(例如Hadoop文件系统或HBase)中读取输入数据,所以将其尽可能靠近该系统很重要。所以,有如下建议:

1,如果可能,在与HDFS相同的节点上运行Spark。最简单的方式是将spark 的Standalone集群和hadoop集群安装在相同的节点,同时配置好Spark和hadoop的内存使用,避免相互干扰(对于hadoop,每个task的内存配置参数是mapred.child.java.opts; mapreduce.tasktracker.map.tasks.maximum 和mapreduce.tasktracker.reduce.tasks.maximum 决定了task的数目)。也可以将hadoop和spark运行在共同的集群管理器上,如mesos和 yarn。

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

3,对于低延迟数据存储(如HBase),可能优先在与存储系统不同的节点上运行计算任务以避免干扰。

二,本地磁盘

虽然Spark可以在内存中执行大量的计算,但它仍然使用本地磁盘来存储不适合RAM的数据,以及在stage之间,也即shuffle的中间结果。我们建议每个节点至少有4-8块磁盘,并且不需要RAID,仅仅是独立的磁盘挂在节点。在Linux中,使用noatime选项安装磁盘,以减少不必要的写入。在spark任务中,spark.local.dir配置可以十多个磁盘目录,以逗号分开。如果你运行在hdfs上,与hdfs保持一致就很好。

使用noatime选项安装磁盘,要求当挂载文件系统时,可以指定标准Linux安装选项(noatime),这将禁用该文件系统上的atime更新。磁盘挂在命令:

mount -t gfs BlockDevice MountPoint -o noatime

BlockDevice 指定GFS文件系统驻留的块设备。

MountPoint 指定GFS文件系统应安装的目录。

例子:

mount -t gfs /dev/vg01/lvol0 /gfs1 -o noatime

三,内存

单台机器内存从8GB到数百GB,spark都能运行良好。在所有情况下,我们建议仅为Spark分配最多75%的内存;留下其余的操作系统和缓冲区缓存。

需要多少内存取决于你的应用程序。要确定你的应用的特定数据集需要多大内存,请加载部分数据集到内存,然后在Spark UI的Storage界面去看它的内存占用量。

请注意,内存使用受到存储级别和序列化格式的极大影响 - 有关如何减少内存使用的技巧,请参阅另一篇调优的文章。

最后,请注意,对于超过200GB的内存的机器JAVA VM运行状态并不一直表现良好。如果你买的机器内存超过了200GB,那么可以在一个节点上运行多个worker。Spark Standalone模式下,你可以在配置文件 conf/spark-env.sh中设置SPARK_WORKER_INSTANCES的值来设置单节点worker的数目。也可以设置SPARK_WORKER_CORES参数来设置每个Worker的cpu数目。

四,网络

根据以往的经验,假如数据是在内存中,那么spark的应用的瓶颈往往就在网络。用10 Gigabit或者更高的网络,是使spark应用跑的最更快的最佳方式。特别是针对“distributed reduce”应用,如group-bys,reduce-bys和sql joins,就表现的更加明显。在任何给定的应用程序中,你可以通过spark ui查看spark shuffle过程夸网络传输了多少数据。

五,cpu

即使每台机器几十个cpu,spark也可以很好的扩展,因为他在线程之间执行最小的共享cpu。你应该每台机器至少配置8-16个内核。根据cpu负载,可能需要更多的cpu:一旦数据在内存中,大多数应用程序的瓶颈就在CPU和内存。

原文发布于微信公众号 - Spark学习技巧(bigdatatip)

原文发表时间:2017-07-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LuckQI

Java大数据学习~Hadoop初识一了解其架构

9430
来自专栏Danny的专栏

【Hadoop学习笔记】——HDFS

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

18920
来自专栏恰童鞋骚年

Hadoop学习笔记—22.Hadoop2.x环境搭建与配置

自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我...

26510
来自专栏Hadoop实操

CDSW1.3的新功能

前两天Fayson介绍过《CDH5.14和CM5.14的新功能》,与CDH5.14同时发布的还有CDSW1.3,以下我们具体看看CDSW1.3的新功能。

44360
来自专栏数据派THU

独家 | 一文读懂Hadoop(二)HDFS(上)

随着全球经济的不断发展,大数据时代早已悄悄到来,而Hadoop又是大数据环境的基础,想入门大数据行业首先需要了解Hadoop的知识。2017年年初apache发...

64590
来自专栏Hadoop实操

HDFS部署最佳实践

57240
来自专栏LanceToBigData

Hadoop(四)HDFS集群详解

前言   前面几篇简单介绍了什么是大数据和Hadoop,也说了怎么搭建最简单的伪分布式和全分布式的hadoop集群。接下来这篇我详细的分享一下HDFS。   H...

54190
来自专栏别先生

一脸懵逼学习Hdfs---动态增加节点和副本数量管理(Hdfs动态扩容)

1:按照上篇博客写的,将各个进程都启动起来: 集群规划:     主机名          IP                  安装的软件         ...

33870
来自专栏Hadoop实操

如何使用HiBench进行基准测试

1.2K40
来自专栏别先生

一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)

1)集群规划: 主机名          IP      安装的软件                      运行的进程 master    192.168...

57190

扫码关注云+社区

领取腾讯云代金券