spark集群硬件建议
ps:硬件配置其实都是根据实际的情况的,没有说某种配置就可以套在各种场景上
大部分spark 任务都是要到外部存储系统去读取数据源,比如hdfs,hbase等等,让spark计算尽可能近的数据源是很重要的,说白了就是数据本地性。所以这种情况一般都建议部署spark worker节点跟hdfs datanode节点一致。(跟hbase regionserver与hdfs datanode一对一同理的)
比如spark standalone,那么worker节点与datanode一致,spark on yarn,nodemanager节点跟datanode节点一致。此外对于低延迟的存储系统,比如hbase,spark计算节点应尽可能的与它错开,避免资源抢占,产生干扰。
关于磁盘:
虽然spark基于内存做大量的计算,但是当内存中数据放不下的时候,还是会保存数据到本地磁盘。stage之间的中间结果一样,也是要落磁盘的。对于磁盘一般推荐每个节点4-8块(如果每个节点的磁盘容量确定,那么不建议磁盘少、每块容量过大这种形式。我们生产上使用的盘每块1.1T,每个节点20+块)并且不需要做RAID,单独挂载即可,在linux环境下,挂载磁盘时可以对noatime参数设置以减少不必要的写入。对于spark,配置spark.local.dir参数,多块盘以逗号分割填写,当然,最好跟hdfs配置的磁盘一致。
关于内存:
通常情况,不管是8G还是上百G的内存机器(但节点),spark都能运行的比较好。但是在内存分配上,推荐分配75%的内存给spark,25%的内存留给系统和buffer cache
究竟需要多少的内存是取决于你的application的,如何判断你的application在某数据集下需要用多少内存,可以读取数据源创建RDD然后进行cache,在spark web ui界面查看storage大小,得到一个估计值。当然这跟你使用哪种cache level以及使用哪种序列化也有关系(所以最好先计划好用哪种序列化方式,以及哪种persist方式);此外,如果单节点内存很大,比如超过200G,分配给spark executor的内存不适合过大。可以单个节点多分配几个executor
关于网络:
推荐10 Gigabit或者更高的网卡配置,尤其有大量的shuffle存在时,比如groupby,reduceby,sql join之类的。另外可以在spark web ui界面查看通过网络传输的shuffle数据量。
关于cpu:
单节点至少8-16核,根据你应用的实际负载决定,在内存中计算的情况下,那么存在瓶颈的可能就是cpu或者网络带宽
最新文章
- 使用Xcode6和IOS8SDK以后遇到的问题
- Maven使用常见问题整理
- Verilog篇(二)系统函数
- oracle修改连接空闲自动断开
- iOS开发——UI篇&;下拉弹出列表选择项效果
- 转载SSIS中的容器和数据流—数据转换(Transformations)
- Qt Creator插件工作流程代码走读
- 20. leetcode 171. Excel Sheet Column Number
- Bellman-Ford&;&;SPFA
- 后台管理系统之系统操作日志开发(Java实现)
- ThinkPHP CI codeignitor 框架 apache 重写 url 隐藏index.php 服务器 报错:Object not found! 可能是.htaccess隐藏index.php
- emwin 之消息 WM_INIT_DIALOG
- CF 681
- struts笔记
- VIM选择文本块/复制/粘贴
- 深入浅出“跨视图粒度计算”--2、INCLUDE表达式
- django fileup-load
- SQL点点滴滴_查询类型和索引-转载
- http://www.cnblogs.com/carekee/articles/1854674.html
- java后端技术