1. 背景
最近的项目使用yarn提交pyspark的任务,遇到了不少坑,目前已经成功地跑通了基于client和cluster两种模式的任务提交。特此记录一下。
2. 平台
大数据平台:某国产厂商的成熟大数据产品,基于容器的架构,四个节点,每个节点100-200G不等。
CPU:华为华为鲲鹏服务器,arm架构
OS:阿里云
程序:使用pyspark编程语言,程序位于节点1上。程序中用到了hjson配置文件,自定义的一些python包。
3. client模式与cluster模式区别
首先我们要知道spark程序主要有driver端和executor端。pyspark的程序主要是运行在多个executor里,但是如果程序中会使用df.toPandas()或者df.collect()并且进行一些基于python的操作,那么这些基于python的操作就会运行在driver里。
当使用client模式时,driver就位于我们程序所在的节点,也就是你运行代码的那个节点。
当使用cluster模式时,driver会由yarn根据资源占用情况,自动安排在某一个负载较少的节点上。
除此之外,使用client 模式提交的代码,可以在本地看到log,比如目前我在一个终端使用命令提交脚本,并输出日志:
./run_model.sh > log
而在另外一个终端中可以实时查看日志(过滤掉大量无用的INFO):
tail -f log -n 100 | grep -v 'INFO'
4. 用yarn模式提交任务
这部分是花时间最多的,因为涉及到pyspark_python和pyspark_driver_python的选择问题,也就是worker的python和driver的python需要使用一个版本。
最终成功的方式如下:
cluster模式:
export&nb

本文详细讲述了作者在某国产大数据平台使用yarn模式部署pyspark任务时,遇到的挑战,包括client和cluster模式的区别、环境配置及解决方案,重点在于如何正确设置PYSPARK_DRIVER_PYTHON和PYSPARK_PYTHON。
最低0.47元/天 解锁文章
597

被折叠的 条评论
为什么被折叠?



