关于SPARK_WORKER_MEMORY和SPARK_MEM

来源:互联网 发布:阿里云怎么打开iis 编辑:程序博客网 时间:2024/06/14 15:43
在spark中最容易混淆的是各种内存关系。本篇讲述一下SPARK_WORKER_MEMORY和SPARK_MEM。

SPARK_WORKER_MEMORY是计算节点worker所能支配的内存,各个节点可以根据实际物理内存的大小,通过配置conf/spark-env.sh来分配内存给该节点的worker进程使用。在spark standalone集群中,如果各节点的物理配置不一样,conf/spark-env.sh中的配置也可以不一样。习惯上,为了维护方便,我们修改了master的配置,然后就scp到各个节点上,生产上,我们还是应该根据各个节点的实际情况来配置。
比如:Spark1.0.0 Standalone模式部署中可以分别修改各节点的SPARK_WORKER_MEMORY参数:
  • hadoop2为700m
  • hadoop3为800m
  • hadoop4为900m
  • hadoop5为1000m

SPARK_MEM是SparkContext提交给worker运行的executor进程所需要的内存,如果worker本身能支配的内存小于这个内存,那么在该worker上就不会分配到executor。Spark Application在SparkContext里中没有配置内存需求的情况下,如果设置了环境变量SPARK_MEM,Spark Application则取设置的数值,不然取缺省值512m。

现在在客户端wyy上配置SPARK_MEM=900m,然后运行spark-shell,查看监控情况,可以发现,spark-shell只使用了hadoop4和hadoop5这两个worker,而hadoop2和hadoop3因为内存满足不了spark-shell的内存需求而没有使用。
hadoop@wyy:/app/hadoop/spark090$ export SPARK_MEM=900m
hadoop@wyy:/app/hadoop/spark090$ MASTER=spark://hadoop1:7077 bin/spark-shell

 
TIPS:
如果是非集群中客户端提交Spark Application,那么该客户端的spark部署目录要和集群中的目录一致,不然容易出错。
Spark Application申请内存的优先次序是:SparkContext中配置 > SPARK_MEM > 缺省值512m

本文转自http://blog.csdn.net/book_mmicky/article/details/25714449,所有权利归原作者所有。
原创粉丝点击