Spark的资源参数,基本都可以在 spark-submit 命令中作为参数设置
如何合理的设置number-executor,executor-memory,executor-cores?
问题假设--处理500G数据文件(未压缩)
服务器配置:100节点 16core 48g
要求:普通的统计运算(不是迭代计算/机器学习),不能简单的wordcount
那应该怎样合理的分配资源?
若是没有参数配置,则会默认 每个应用程序会有最大 max_core (配置文件配置)
重点是executor数量如何设置**
主要是Executor会持有内存和cpu;
参数配置主要是针对参与计算的组件分配资源:Driver和Executor,因为整个运行过程中只有一个Driver,Executor多个
缺省情况下,driver(1个)--1个core
设置参数的方法:
一、根据经验判断
二、可以通过简单的推理计算:
以下是个人理解的计算步骤:
1.计算task任务数量
2.计算每个节点的Executor分配比例(core和memory)
3.计算Executor数量
4.如何申请?
spark官方文档--一般情况推荐 2-3 task / core
1.计算需要有多少core?
500g (hdfs默认块大小128M)可以获取task数量约为 4000
假设每4个任务使用1个core,则可得 4000 /4个任务 =1000 core
重要的是获取 Executor ,Executor(封装的有core和memory)
2.在每个节点如何分配executor
检查内存是否足够,是需要分配堆外内存,堆外内存分配在worker上,executor共享;(一般情形下是需要考虑堆外内存的)
假设:16core,48G 可以这样分配(不建议这种配置)==>
Executor(16core,48G) 太过极端 16/16 1个executor 48G 没有堆外内存,程序会出问题,因为driver也需要core和memory
Executor(8core,24G)
Executor(4core,12G)
Executor(2core,6G)
Executor(16core,32G) + 16G 堆外内存,堆外内存需要测试得知具体分配多少合适
假如:每个Executor的core 3-5个之间,则可得Executor(5core,15G)
3.计算executor数量
由以上已知推理条件可得:Executor数量=1000Core/ 5 = 200 exeuctor
4.如何申请?
spark-submit方式提交
spark-submit \
--master yarn-cluster \
--num-executors 100 \
--executor-memory 10G \
--executor-cores 4 \
--driver-memory 2G \
--conf spark.memory.fraction=0.7