立即注册 登录
About云-梭伦科技 返回首页

starrycheng的个人空间 https://www.aboutyun.com/?1310 [收藏] [复制] [分享] [RSS]

日志

spark经验记录

已有 2010 次阅读2016-11-15 15:29 | 记录

1.      spark性能配置

我目前的环境是5台机器,每台机器8个核。如果有以下两种配置方案:

(a)

   SPARK_WORKER_INSTANCES = 8

   SPARK_WORKER_CORES = 1

 (b)

   SPARK_WORKER_INSTANCES = 1

      SPARK_WORKER_CORES = 8

 如何处理?

答: a方案每个节点会启动8个worker运行8个JVM,每个worker将会启动一个excutors, b方案将会启动一个worker运行一个JVM。如果数据很小,选择b方案,因为可以节省启动JVM的开销,如果数据很大,启动JVM的时间可以忽略,则选a方案。

如果5台机器的内存都是48g,a,b方案在添加如下配置:

(a)SPARK_WORKER_MEMORY = 6g     //给每个worker 分配6G 内存

(b)SPARK_WORKER_MEMORY = 48g

配置的时候注意:

SPARK_WORKER_CORES * SPARK_WORKER_INSTANCES= 每台机器总cores  

 ####################################################


Environment VariableMeaning
SPARK_MASTER_IP绑定一个外部IP给master.
SPARK_MASTER_PORT从另外一个端口启动master(默认: 7077)
SPARK_MASTER_WEBUI_PORTMaster的web UI端口 (默认: 8080)
SPARK_WORKER_PORT启动Spark worker 的专用端口(默认:随机)
SPARK_WORKER_DIR伸缩空间和日志输入的目录路径(默认: SPARK_HOME/work);
SPARK_WORKER_CORES作业可用的CPU内核数量(默认: 所有可用的);
SPARK_WORKER_MEMORY作业可使用的内存容量,默认格式1000M或者 2G (默认:  所有RAM去掉给操作系统用的1 GB);注意:每个作业自己的内存空间由SPARK_MEM决定。
SPARK_WORKER_WEBUI_PORTworker 的web UI 启动端口(默认: 8081)
SPARK_WORKER_INSTANCES没太机器上运行worker数量 (默认: 1). 当你有一个非常强大的计算机的时候和需要多个Spark worker进程的时候你可以修改这个默认值大于1 . 如果你设置了这个值。要确保SPARK_WORKER_CORE 明确限制每一个r worker的核心数, 否则每个worker 将尝试使用所有的核心
SPARK_DAEMON_MEMORY分配给Spark master和 worker 守护进程的内存空间 (默认: 512m)
SPARK_DAEMON_JAVA_OPTSSpark master 和 worker守护进程的JVM 选项(默认: none)

注意: 启动脚本目前不支持Windows。要运行一个Spark 集群在Windows上,手动启动master 和 workers 


 ####################################################
内存的使用
      spark应用程序最纠结的地方就是内存的使用了,也是最能体现“细节是魔鬼”的地方。Spark的内存配置项有不少,其中比较重要的几个是:
  • SPARK_WORKER_MEMORY,在conf/spark-env.sh中配置SPARK_WORKER_MEMORY 和SPARK_WORKER_INSTANCES,可以充分的利用节点的内存资源,SPARK_WORKER_INSTANCES*SPARK_WORKER_MEMORY不要超过节点本身具备的内存容量;
  • executor-memory,在spark-shell或spark-submit提交spark应用程序时申请使用的内存数量;不要超过节点的SPARK_WORKER_MEMORY;
  • spark.storage.memoryFraction spark应用程序在所申请的内存资源中可用于cache的比例
  • spark.shuffle.memoryFraction spark应用程序在所申请的内存资源中可用于shuffle的比例
在实际使用上,对于后两个参数,可以根据常用查询的内存消耗情况做适当的变更。另外,在SparkSQL使用上,有几点建议:
  • 对于频繁使用的表或查询才进行缓存,对于只使用一次的表不需要缓存;
  • 对于join操作,优先缓存较小的表;
  • 要多注意Stage的监控,多思考如何才能更多的Task使用PROCESS_LOCAL;
  • 要多注意Storage的监控,多思考如何才能Fraction cached的比例更多

 #############################################################

一. Spark相关概念

1. Worker:在Standalone模式中,指的就是slaves文件中配置的节点,在Spark on Yarn模式中,指的就是NodeManager节点。

2. Standalone模式:Spark原生的资源管理框架,由Master负责资源的分配。

3. DAGScheduler:负责每个Job中Stage的划分和调度。

4. Executor:一个Application运行在Worker节点的一个进程。每个Worker上存在一个或者多个该进程。每个进程包含一个Executor对象,该对象持有一个线程池,每个线程可以执行一个Task。

5. Yarn模式:Yarn-Cluster中Driver和Executor都运行在Yarn集群中;Yarn-Client中Driver运行在本地,Executor运行在Yarn集群中。


二. Spark相关配置

1. Standalone模式

(1)SPARK_WORKER_CORES:每个Worker节点所能提供给所有Spark Application使用的CPU的总数目。

(2)SPARK_WORKER_MEMORY:每个Worker节点所能提供给所有Spark Application使用的内存的总大小。

(3)SPARK_WORKER_INSTANCES:每个Worker节点启动的Worker进程的数量。

(4)SPARK_DAEMON_MEMORY:Master进程和Worker进程启动时的默认内存大小(512M)。

说明:

(1)每个节点使用的最大内存数:SPARK_WORKER_INSTANCES*SPARK_WORKER_MEMORY;
(2)每个节点的最大并发Task数:SPARK_WORKER_INSTANCES*SPARK_WORKER_CORES。

2. Yarn-Client模式

(1)SPARK_EXECUTOR_INSTANCES:在Yarn集群中启动的ExecutorBackend的数目,默认为2个。

(2)SPARK_EXECUTOR_CORES:每个ExecutorBackend所占用的CPU核的数目。

(3)SPARK_EXECUTOR_MEMORY:每个ExecutorBackend所占用的内存大小;

(4)SPARK_DRIVER_MEMORY:Spark应用程序Application的Driver(即Yarn中的ApplicationMaster)运行时所占的内存大小。

3. Yarn-Cluster模式

如果是Yarn-Cluster模式,Executor的数目由spark-submit工具的--num-executors参数指定,默认是2个实例,而每个Executor使用的CPU数目由--executor-cores指定,默认为1核。

说明:

(1)集群Task并行度:SPARK_ EXECUTOR_INSTANCES* SPARK_EXECUTOR_CORES;

(2)集群内存总量:(executor个数) * (SPARK_EXECUTOR_MEMORY+ spark.yarn.executor.memoryOverhead)+(SPARK_DRIVER_MEMORY+spark.yarn.driver.memoryOverhead)。

(3)Spark对Executor和Driver额外添加堆内存大小,Executor端由spark.yarn.executor.memoryOverhead设置,默认值executorMemory * 0.07与384的最大值。Driver端由spark.yarn.driver.memoryOverhead设置,默认值driverMemory * 0.07与384的最大值。

(4)通过调整上述参数,可以提高集群并行度,让系统同时执行的任务更多,那么对于相同的任务,并行度高了,可以减少轮询次数。但是在资源相同的情况,并行度高了,相应的Executor内存就会减少,所以需要根据实际实况协调内存和core。总之,集群调优,具体问题具体分析。





路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

关闭

推荐上一条 /2 下一条