spark的执行流程:
spark的集群 :
master:
1/管理集群,start-all.sh,启动集群,让worker去master 发心跳,上报自己状态,告诉master自己有多少资源(cpu,内存)
2/接受driver的注册。你的程application运行之后,会在driver端,向master进行注册。
3/资源调度,spark程序可以同时的运行很多个application,每个application都需要一定的资源,举例:集群的资源是有限的(64g内存,32核),有很多的程序需要运行,
资源调度就是资源相对有限,需求不止一个的情况。不止一个意味着需要分配,master就是来分配的,里面有两种分配策略,1,尽量打散,2.尽量集中
master 本身并不提供资源,worker提供资源,worker提供的资源就会被封装到executor
worker-executor :
1/ 是分布式程序的执行者,执行的是task,在一个executor可以有很多个task,executor里面封装了资源(cpu,内存),问题:一个executor 有多个task,这些task是怎么执行的??
举例:这个executor(2个cpu,4g内存) 有 10个task,他们怎么执行的??
driver:1/我们写的程序,会为main方法,在集群里面启动一个进程,这个进程就是driver程序。driver主要做初始化(过程很复杂)
2/ driver向master注册(告诉master有一个什么样的程序需要你调度,同时告诉你我需要多少资源)
spark-submit
--executor-cores
--executor-memory
....
在提交任务的时候,需要多少资源
spark-submit --class com.talkingdata.dmp.spark.job.label.statistics.AppAlgorithm \
--master yarn-cluster \
--queue default \
--name tagMerge_update_statidtics \
--num-executors 24 \ ## 需要多少个executor
--driver-memory 4g \ ## driver程序的内存需要多大
--executor-memory 4g \ ## 每个executor分配的内存有多大
--executor-cores 2 \ ## 每个executor的cpu核(逻辑核)
--conf spark.akka.timeout=200 \
--conf spark.shuffle.io.maxRetries=5 \
--conf spark.yarn.executor.memoryOverhead=3000 \
--conf spark.shuffle.consolidateFiles=true \
--conf spark.shuffle.memoryFraction=0.3 \
--conf spark.storage.memoryFraction=0.5 \
--jars $DependJars \
$LOCAL_JAR $appinput $taginput $out
这个程序需要多少核:
24 * 2 + 1 = 49 核
需要多少内存:
24*4 + 4 = 100g
--conf 都是一些运行时候的参数,这些参数也可以不设置,不设置就是默认值,为了优化
参数调优的主要作用:
1,为了充分利用现有资源,让程序运行更稳当,快速
2,可能程序目前不起来,但是通过参数调优之后,程序就能够运行起来了
spark的集群 :
master:
1/管理集群,start-all.sh,启动集群,让worker去master 发心跳,上报自己状态,告诉master自己有多少资源(cpu,内存)
2/接受driver的注册。你的程application运行之后,会在driver端,向master进行注册。
3/资源调度,spark程序可以同时的运行很多个application,每个application都需要一定的资源,举例:集群的资源是有限的(64g内存,32核),有很多的程序需要运行,
资源调度就是资源相对有限,需求不止一个的情况。不止一个意味着需要分配,master就是来分配的,里面有两种分配策略,1,尽量打散,2.尽量集中
master 本身并不提供资源,worker提供资源,worker提供的资源就会被封装到executor
worker-executor :
1/ 是分布式程序的执行者,执行的是task,在一个executor可以有很多个task,executor里面封装了资源(cpu,内存),问题:一个executor 有多个task,这些task是怎么执行的??
举例:这个executor(2个cpu,4g内存) 有 10个task,他们怎么执行的??
driver:1/我们写的程序,会为main方法,在集群里面启动一个进程,这个进程就是driver程序。driver主要做初始化(过程很复杂)
2/ driver向master注册(告诉master有一个什么样的程序需要你调度,同时告诉你我需要多少资源)
spark-submit
--executor-cores
--executor-memory
....
在提交任务的时候,需要多少资源
spark-submit --class com.talkingdata.dmp.spark.job.label.statistics.AppAlgorithm \
--master yarn-cluster \
--queue default \
--name tagMerge_update_statidtics \
--num-executors 24 \ ## 需要多少个executor
--driver-memory 4g \ ## driver程序的内存需要多大
--executor-memory 4g \ ## 每个executor分配的内存有多大
--executor-cores 2 \ ## 每个executor的cpu核(逻辑核)
--conf spark.akka.timeout=200 \
--conf spark.shuffle.io.maxRetries=5 \
--conf spark.yarn.executor.memoryOverhead=3000 \
--conf spark.shuffle.consolidateFiles=true \
--conf spark.shuffle.memoryFraction=0.3 \
--conf spark.storage.memoryFraction=0.5 \
--jars $DependJars \
$LOCAL_JAR $appinput $taginput $out
这个程序需要多少核:
24 * 2 + 1 = 49 核
需要多少内存:
24*4 + 4 = 100g
--conf 都是一些运行时候的参数,这些参数也可以不设置,不设置就是默认值,为了优化
参数调优的主要作用:
1,为了充分利用现有资源,让程序运行更稳当,快速
2,可能程序目前不起来,但是通过参数调优之后,程序就能够运行起来了