对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有多个版本,其中最强的是分布 ...
随机推荐
- P2832 行路难
题面 Link 题目背景 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述 山区有 \(n\) 座山.山之间有 \(m\) 条羊肠小道,每条连接两座山,只能单向通过, ...
- 证明RSA算法在明文和公私钥中N不互质情况下仍然成立
关于RSA的基础过程介绍 下文中的 k 代表自然数常数,不同句子,公式中不一定代表同一个数 之前接触RSA,没有过多的思考证明过程,今天有感而发,推到了一遍 假设公钥 (e, N) , 私钥 (d, ...
- appium 环境安装指引
1.安装Appium-Python-Client Pip install Appium-Python-Client 2.安装nodejs https://nodejs.org/ 安装成功验证:node ...
- xshell选项卡不见了
最近使用xshell的时候发现建立多个选项卡的时候,因为没有选项卡,所以不能切换. 弄了好一会儿才弄出来 点击会话选项卡或者Ctrl + Shift + T可以调出来
- MySQL数据库之索引、事务、存储引擎详细讲解
一.索引 1.1 索引的概念 索引是一个排序的列表,存储着索引值和这个值所对应的物理地址 无须对整个表进行扫描,通过物理地址就可以找到所需数据 (数据库索引类似书中的目录,通过目录就可以快速査找所需信 ...
- ubuntu20 make redis6
redis 官网:https://redis.io redis 下载和编译位置: cd /opt 下载 redis: wget http://download.redis.io/releases/re ...
- win10 home安装docker快速攻略
本文适用于win10 Home用户,专业版和企业版直接见官网.win7版本见Docker Toolbox. 安装清单 软件 说明 Docker Desktop Installer 步骤介绍页:http ...
- Android HandlerThread 详解
概述 HandlerThread 相信大家都比较熟悉了,从名字上看是一个带有 Handler 消息循环机制的一个线程,比一般的线程多了消息循环的机制,可以说是Handler + Thread 的结合, ...
- linux学习(一)--启动文件bootsect.s
这是linux由BIOS加载后执行的第一段的启动程序代码,即文件 boot/bootsect.s 首先附图,简单介绍一下从开机加电到第一段linux代码执行的简要过程 1 .globl begte ...
- docket镜像
1.是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. 1.1.什么是UnionF ...