开启spark服务之前要先优先打开hdfs服务和相应的历史服务器
standalone模式
- hdfs开启
start-dfs.sh
- yarn开启
$HADOOP_HOME/sbin/start-yarn.sh
- 开启yarn的历史服务器
$HADOOP_HOME/bin/mapred --daemon start historyserver
- 开启spark的历史服务器
在spark/sbin目录下执行
start-history-server.sh
- 开启spark服务
在spark/sbin目录下执行
./start-all.sh
要注意不要直接执行start-all,不然是启动hdfs服务的
-
访问sparkmaster服务
观察spark-master是否处于工作状态中,可以访问{master-node}:8080端口,其中会给出master节点的工作端口和地址。
通过这个地址就能够创建standalone状态的spark集群服务。
-
观察spark程序运行状态
在spark job运行的过程中,可以访问{master-node}:4040端口,会给出进程具体的工作状态过程。
要注意在job结束后该端口就会被关闭,无法访问。
spark程序中Job、State、Task三个概念之间的关系
一个spark程序(Application)可以被拆分成多个job,每个job又可以被拆分成多个state(stage),
每个state又会分出多个task来执行。
每个task占据一个线程
spark中线程和进程之间的关系
spark每个task占据一个线程
每次提交spark的applicatio任务,master(Driver)节点会分析该application,然后决定要使用多少个executor,每个executor会占据一个进程。每个worker节点中都包含一个executor进程。
driver会将一个application根据action算子的数量,将一个application拆分成多个job,在每个job的内部,根据有向无环图(DAG)再将一个job划分成多个stage,每个stage的内部也根据DAG拆分成多个task,每个task占据一个线程。
DAG scheduler负责任务的拆分,然后将taskset交给task manager,task manager负责将task放在具体的executor上执行。
spark standalone HA 模式
standalone 存在master单点故障的问题,即master一旦宕机,则该standalone集群即不可用
解决方法:使用zookeeper的standby masters
- 设置多个master节点,但是保证只有一个master处于激活状态,其余的master节点都是处于standby状态
- 当一个master宕机的时候,另一个standby的master就会被激活
- 系统的信息都被持久化到了文件系统中,包括worker、driver、application等信息,因此,后续提交的job就会由新的master来执行,正在进行中的job不受影响
启动zookeeper
在zookeeper/bin目录下执行
./zkServer.sh start
spark on yarn 模式
spark on yarn模式就是不需要创建spark独立的集群,让spark依赖于yarn集群。
在standalone模式中,如果已经有了yarn集群,那么在单独部署一个spark集群,就对资源的利用率进行了降低。
on yarn模式中,不需要部署spark集群,只需要通过一个服务器充当客户端将spark部署到yarn集群上即可。
spark on yarn的本质
- master 角色由yarn的resourcemanager担当
- worker的角色由NodeManger担当
- Driver运行在yarn的容器内或者在提交任务的客户端进程中
- executor运行在yarn的容器中
spark on yarn的部署
确保两个环境变量配置好了
- HADOOP_CONF_DIR
- YARN_CONF_DIR
spark on yarn的两种模式
两种模式的主要区别在于driver的运行位置不同
-
cluster模式
driver运行在yarn容器的内部,和applicationmaster运行在同一个容器内
- 缺点:需要进入到容器的内部才能够看到driver的日志,client模式可以直接在客户端的标准流中看到日志的输出
- 优点:通讯效率较高、较为稳定,适合生产模式
-
client模式
driver运行在客户端进程中,运行在spark-submit的进程中。
- 缺点:通讯效率较cluster模式相对较低,且基于客户端进程,较为不稳定
- 优点:输出日志较容易观察,适合测试开发环境
client模式
cluster模式
pyspark on spark原理
-
driver端
python通过socket与spark创建的driver运行的底层JVM进行交互,代码通过py4j转换成java代码,创建对应的sc,实现与spark的运行
-
worker端
worker上会创建一个pyspark的守护进程,driver的指令发送给executor的jvm,jvm将其转发给pyspark的守护进程,守护进程将该指令调度到运行中的python程序上。
本质上worker端的python进程在工作,但是指令来自于jvm,通过RPC协议发送给python进程
-
-
-
- 开启spark服务
- 开启spark的历史服务器
- 开启yarn的历史服务器
- yarn开启
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章