spark的集群主要有三种运行模式standalone、yarn、mesos,其中常被使用的是standalone和yarn,本文了解一下什么是standalone运行模式,并尝试搭建一个standalone集群
standalone模式,是spark自己实现的,它是一个资源调度框架。这里我们要关注这个框架的三个节点:
spark应用程序有一个Driver驱动,Driver可以运行在Client上也可以运行在master上。如果你使用spark-shell去提交job的话它会是运行在master上的,如果你使用spark-submit或者IDEA开发工具方式运行,那么它是运行在Client上的。这样我们知道了,Client的主体作用就是运行Driver。而master除了资源调度的作用还可以运行Driver。
再关注master和worker节点,standalone是一个主从模式,master节点负责资源管理,worker节点负责任务的执行。
standalone的是spark默认的运行模式,它的运行流程主要就是把程序代码解析成dag结构,并再细分到各个task提交给executor线程池去并行计算
了解standalone主要节点之后,我们看一下它的运行流程,如图:
1)当spark集群启动以后,worker节点会有一个心跳机制和master保持通信;
2)SparkContext连接到master以后会向master申请资源,而master会根据worker心跳来分配worker的资源,并启动worker的executor进程;
3)SparkContext将程序代码解析成dag结构,并提交给DagScheduler;
4)dag会在DagScheduler中分解成很多stage,每个stage包含着多个task;
5)stage会被提交给TaskScheduler,而TaskScheduler会将task分配到worker,提交给executor进程,executor进程会创建线程池去执行task,并且向SparkContext报告执行情况,直到task完成;
6)所有task完成以后,SparkContext向Master注销并释放资源;
hostname | 系统版本 |
---|---|
master | CentOS7.6 |
slave1 | CentOS7.6 |
slave2 | CentOS7.6 |
在spark-config.sh文件中配置JAVAHOME
vi spark-config.sh
export JAVA_HOME=/usr/local/apps/java/jdk1.8
cp spark-env.sh.template spark-env.sh
vi spark-env.sh
export JAVA_HOME=/usr/local/apps/java/jdk1.8
export SCALA_HOME=/usr/local/apps/scala/scala-2.12.2
export SPARK_MASTER_HOST=master
export SPARK_WORKER_MEMORY=25g
export SPARK_WORKER_CORES=34
export SPARK_LOCAL_IP=127.0.0.1
export SPARK_MASTER_PORT=7077
export SPARK_LOCAL_IP=master
其中SPARK_LOCAL_IP
要配置为当前主机的hostname
cp slaves.template slaves
slave1
slave2
$ sbin/start-all.sh
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fmreEthG-1609913096682)(image/image3.png)]
使用jps命令查看进程master下会有maser进程,slave下会有worker进程