对Spark硬件配置的建议
对于Spark开发人员来说,一个比较普遍的问题就是如何合理的配置Spark的硬件?当然如何合理的对Spark集群进行硬件配置要视情况而定,在这里给出以下建议:
存储系统
在大数据领域,有一句"名言":移动数据不如移动计算。主要因为数据量是庞大的,如果将数据从一个节点移动到另外一个节点甚至从一个局域网移动到另外一个局域网,就必然会牵涉到大量的磁盘IO和网络IO,这是非常影响性能的。而这里的计算可以理解为封装了你的业务处理代码的jar包,这个是很轻量的,相对于移动数据可有效缓解IO带来的弊端。
因此,将Spark集群节点尽可能部署到靠近存储系统的节点是非常重要的,因为大多数据Spark jobs通常从外部存储系统,如Hadoop文件系统、HBase获取数据。
具体可参考以下建议:
1. 以HDFS作为存储系统为例,建议在与HDFS相同的节点上运行Spark。最简单的方式就是将Spark的standalone集群和Hadoop进群部署在相同节点,同时配置好Spark和Hadoop的内存、CPU使用以避免相互干扰。
| 在Hadoop中,一些参数(注意Hadoop新版本中下列参数可能有所变化,具体根据自己使用的版本查看Hadoop官网)每个task的内存配置参数:mapred.child.java.opts,如设置为-Xmx1024m
单个节点map task数目配置参数:mapreduce.tasktracker.map.tasks.maximum 单个节点reduce task数目配置参数:mapreduce.tasktracker.reduce.tasks.maximum |
此外,你也可以将Spark和Hadoop运行在共同的集群资源管理器上,如Yarn和Meso。
2. 如果不能满足1中的条件,请将Spark和HDFS部署在同一局域网下的不同节点上。
3.对于低延迟数据存储如HBase,可能优先在与存储系统不同的节点上运行计算任务以避免干扰【计算引擎在处理任务时,比较消耗服务器资源,可能影响低延迟存储系统的即时响应】
本地磁盘
尽管Spark可以在内存中处理大量的计算,但它仍然需要使用本地磁盘来存储不适合RAM的数据、以及在stage之间即shuffle的中间结果。建议每个节点配备4-8块磁盘,并且这些磁盘是作为独立的磁盘挂在节点即可,不需要做磁盘阵列。
在Linux中,使用noatime选项安装磁盘,以减少不必要的写操作。在Spark中,通过参数spark.local.dir可以配置多个本地磁盘目录,多个目录之间以逗号分开。如果Spark任务运行在hdfs上,与hdfs保持一致就好。
使用noatime选项安装磁盘,要求当挂载文件系统时,可以指定标准Linux安装选项,这将停止该文件系统上的atime更新。
磁盘挂载命令:mount -t gfs BlockDevice MountPoint -o noatime(BlockDevice:指定GFS文件系统驻留的块设备;MountPoint:指定GFS文件系统应安装的目录)。
示例:mount -t gfs /dev/vg00/lvol00 /gfs_dir -o noatime
内存
通常情况下,每台机器的内存配置从8G到数百G,Spark都能良好的运行。但建议最多分配给Spark75%的内存,剩余的留给操作系统和buffer cache。
当然,具体需要多少内存取决于你的应用。要确定你的应用使用的特定数据集需要多大内存,请加载部分数据集到内存缓存起来,然后在Spark UI(http://<driver-node>:4040)的Storage界面去看它的内存占用量。
注意:内存使用多少受到存储级别和序列化格式的影响,可以参考http://spark.apache.org/docs/latest/tuning.html的建议。
最后,请注意,对于超过200GB的内存的RAM,JAVA VM运行状态并不一直表现良好。如果你的机器内存超过了200GB,那么可以在一个节点上运行多个worker。在Spark standalone模式下,可以在配置文件conf/spark-env.sh中设置SPARK_WORKER_INSTANCES的值来设置每个节点worker的数目,通过SPARK_WORKER_CORES参数来设置每个Worker的核数。
网络
根据以往的经验,如果数据是在内存中,那么Spark应用的瓶颈往往就在网络。用10 Gigabit或者更高的网络,是使Spark应用跑的更快的最佳方式。特别是针对"distributed reduce"操作,如group-bys,reduce-bys和SQL joins,就表现的更加明显。在任何给定的应用程序中,都可以通过Spark UI查看Spark shuffle过程中跨网络传输了多少数据。
CPU cores
因为Spark在线程之间执行最小的共享CPU,因此它可以很好的扩展到每台机器几十个CPU核。建议每台机器至少配置8-16个内核。当然,具体根据你任务的CPU负载,可能需要更多的CPU:一旦数据在内存中,大多数应用程序的瓶颈就在CPU和网络。
本文主要参译于官网,笔者在此基础上做了一些解释说明,利于大家理解。
关注微信公众号:大数据学习与分享,获取更对技术干货
对Spark硬件配置的建议的更多相关文章
- 【Spark】---- Spark 硬件配置
存储系统 Spark任务需要从一些外部的存储系统加载数据(如:HDFS 或者 HBase),重要的是存储系统要接近Spark系统,我们有如下推荐: (1)如果可能,运行Spark在相同的HDFS节 ...
- Spark硬件配置推荐
1.存储系统 如果可以的话,把Spark的hadoop的节点安装在一起,最容易的方式是用standalone的模式安装,用mapred.child.java.opts设置每个任务的内存,用mapred ...
- 【Spark学习】Apache Spark集群硬件配置要求
Spark版本:1.1.1 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4135912.html 目录 存 ...
- 如何查看LINUX 硬件配置信息
如何查看LINUX 硬件配置信息 在网上找了N久,发现了一篇不错的文档,转载一下: 1.查看机器所有硬件信息: dmidecode |more dmesg |more 这2个命令出来的信息都非常多,所 ...
- 为Hadoop集群选择合适的硬件配置
随着Apache Hadoop的起步,云客户的增多面临的首要问题就是如何为他们新的的Hadoop集群选择合适的硬件. 尽管Hadoop被设计为运行在行业标准的硬件上,提出一个理想的集群配置不想提供硬件 ...
- MongoDB的容量规划及硬件配置
mongo是基于内存的数据库,应尽量将工作集中的数据全部加载到内存中,即内存应大于工作集 本文译自Chad Tindel的英文博客: http://www.mongodb.com/blog/post/ ...
- Spark 属性配置
1.Spark1.x 属性配置方式 Spark属性提供了大部分应用程序的控制项,并且可以单独为每个应用程序进行配置. 在Spark1.0.0提供了3种方式的属性配置: SparkConf方式 Spar ...
- 嵌入式Linux设备驱动程序:发现硬件配置
嵌入式Linux设备驱动程序:发现硬件配置 Embedded Linux device drivers: Discovering the hardware configuration Interfac ...
- 人机大战之AlphaGo的硬件配置和算法研究
AlphaGo的硬件配置 最近AlphaGo与李世石的比赛如火如荼,关于第四盘李世石神之一手不在我们的讨论范围之内.我们重点讨论下AlphaGo的硬件配置: AlphaGo有多个版本,其中最强的是分布 ...
随机推荐
- SHOI 2014 【概率充电器】
加油,两道了,也就还剩那么二十来道吧,慢慢做...... 题目大意: 给你一颗树,树上的每一个节点都有一定的概率p[i]能冲上电,有电的点,可以通过树上的边,一定概率地将电传递到与它相邻的点,同时对于 ...
- python之线程池和进程池
线程池和进程池 一.池的概念 池是用来保证计算机硬件安全的情况下最大限度的利用计算机 它降低了程序的运行效率但是保证了计算机硬件的安全从而让你写的程序能够正常运行 ''' 无论是开设进程也好还是开设线 ...
- CLion 控制台输出内容乱码问题的解决方法
问题再现 #include "stdio.h" #include "stdlib.h" int main() { printf("嘤嘤嘤") ...
- day60 Pyhton 框架Django 03
day61 内容回顾 1.安装 1. 命令行: pip install django==1.11.18 pip install django==1.11.18 -i 源 2. pycharm sett ...
- day05 Pyhton学习总结
1.字符串str s1="asasd",字符串不能修改 修改以后只能赋值给另一个变量 ret1=s1 1.切片 s1[0], s1[-1], s1[2:4], s1[-1:-4:- ...
- 关于pipeline的一篇转载博文https://www.cnblogs.com/midhillzhou/p/5588958.html
引用自https://www.cnblogs.com/midhillzhou/p/5588958.html 1.pipeline的产生 从一个现象说起,有一家咖啡吧生意特别好,每天来的客人络绎不绝,客 ...
- docker启动服务---------------mysql
1.查找镜像: docker search mysql 也可以去官网查看镜像tag,选择自己需要的版本,否则会下载最新版本:https://hub.docker.com/_/mysql/ 2.下载镜像 ...
- rabbitmq 交换机模式一 广播模式 fanout
<?php require_once "./vendor/autoload.php"; use PhpAmqpLib\Connection\AMQPStreamConnect ...
- centos8平台使用stress做压力测试
一,安装stress: 说明:el8的源里面还没有,先用el7的rpm包 [root@centos8 source]# wget https://download-ib01.fedoraproject ...
- laravel或者lumen门面和服务提供者使用
关于laravel门面和服务提供者使用的一点见解,门面之词,不足之处,还请多多指教. 在laravel中,我们可能需要用到自己添加的类时,可以建立一个文件夹专门存放类文件,也可以使用lara ...