Spark On Yarn基本原理
- 对于企业来说,如果在已有的Yarn群集的前提下单独准备Spark Standalone群集,本身对资源的利用率就不会很高,所以在很多企业的应用场景下,Spark一般会运行到Yarn的群集中。
- YARN本身是一个资源调度框架,负责对运行在内部的计算框架进行资源调度管理,作为典型的计算框架,Spark本身可以直接运行在YARN中,并接受YARN调度。所以无需部署Spark集群,只需要找一台服务器,充当Spark的客户端,就可可提交任务到YARN集群。
Spark On Yarn架构图
- YARN中的ResourceManager代替Spark中的Master角色。
- YARN中的NodeManager代替Spark中的Worker角色。
- Drvier角色运行在Yarn容器内或提交任务的客户端进程中。
- Executor运行在Yarn提供的容器内。
Spark On Yarn部署及测试
- 部署方式与之前相同,需要注意点,确保spark-env,sh这个脚本中必须添加HADOOP_CONF_DIR与YARN_CONF_DIR两个环境变量:
#具体环境变量根据自己系统来设定
HADOOP_CONF_DIR=/export/server/hadoop-3.3.0/etc/hadoop
YARN_CONF_DIR=/export/server/hadoop-3.3.0/etc/hadoop
- pyspark连接到Yarn中,使用以下命令:
# --deploy-mode 选项是指定部署模式, 默认是 客户端模式
# client就是客户端模式
# cluster就是集群模式
# --deploy-mode 仅可以用在YARN模式下
bin/pyspark --master yarn --deploy-mode client|cluster
我们可以在Yarn资源管理界面中查看这个任务,输入http://node1:8088
- 验证测试以下
sc.parallelize([1,2,3,4,5]).map(lambda x: 2*x+1).collect()
-
如何查看子任务
输入node1:4040或点击如下图所示即可进入任务界面
退出pyspark之后yarn程序状态显示FINISHED
-
spark-submit提交到Yarn中,使用以下命令:
bin/spark-submit --master yarn /export/server/spark-3.2.0/examples/src/main/python/pi.py 100