Application在集群中运行的大概流程
流程:
1.Driver分发task到数据所在的节点上运行。
计算找数据,减少网络IO
2.每一个任务的执行结果拉回到Driver进程中
这种操作很危险,容易导致Driver端OOM。可以通过代码控制是否将计算结果拉回到Driver端
Driver的作用:
1.分发任务到计算节点运行
2.监控task(thread)的运行情况
3.如果task失败,会重新发送(有次数限制)
4.可以将计算结果拉回到Driver进程
结论:Driver会和集群频繁通信
Application提交的方式
client提交方式 | cluster提交方式 | |
---|---|---|
Driver进程 | 在client端节点启动 | 在集群中随机一台Worker节点上启动 |
提交命令 | spark-submit --master spark://node01:7077 --class className jarPath args | spark-submit --master spark://node01:7077 --deploy-mode cluster --class className jarPath args |
适应场景 | 测试环境 | 生产环境 |
结果 | 客户端节点能够看见 | 去Worker节点查看(可以直接在WORKER_DIR目录下查看,也可以通过网页查看) |
注意:className jarPath args根据代码、jar包位置、参数自己填写
Q:为什么cluster方式适合生产环境?
A:每一次提交Application导致某一台Driver进程所在的节点网卡流量激增问题是无法解决的,但是可以解决的是,如果提交1w个Application,让这1w次网卡流量激增问题分散到集群的各个节点上。
Application提交的集群
Spark集群 | Yarn集群 | |
---|---|---|
依赖集群 | HDFS集群、Spark集群、Zookeeper集群 | HDFS集群、Yarn集群、Zookeeper集群 |
提交命令 | spark-submit --master spark://node01:7077 --class jarPath args | spark-submit --master yarn --class jarPath args |
配置文件 | 不需要改变 | 在spark-env.sh中添加HADOOP_CONF_DIR的路径:$HADOOP_HOME/etc/hadoop |
Q:Spark App 提交到yarn集群上,需要启动standalone集群吗?
A:不需要,甚至可以集群中可以没有spark安装包。但是,client端必须要有spark安装包,因为提交Application的时候需要用到spark-submit命令。
Q:Spark App提交到yarn集群,为什么需要配置HADOOP_CONF_DIR选项?
A:Application提交的时候可以通过HADOOP_CONF_DIR拿到yarn-site.xml配置文件,解析获得Resourcemanager的URL,就可以申请资源了。
Q:将Application提交到Yarn集群上,为什么必须要启动HDFS集群?
A:因为提交Application的时候需要先将jar上传到HDFS上,这样各个节点才能并行的快速的下载。