Dolphinscheduler调度spark任务踩坑记录

1、关于spark调度的worker部署
我在测试Dolphinscheduler时采用的是集群模式,两台机器部署master,两台机器部署worker,而hadoop和spark则是在其他的机器上部署的。在配置dolphinscheduler_env.sh文件时对如何设置spark环境地址就很疑惑。测试调度时果然第一个问题就是找不到spark-submit文件

command: line 5: /bin/spark-submit: No such file or directory

1
2
通过日志查看调度过程就会很清楚的看到,DS需要通过dolphinscheduler_env.sh文件里配置的SPARK_HOME1去找spark-submit脚本。而在不同的服务器上它是找不到该路径的。

所以问题的解决我想到两个方案:
1、把spark的安装包拿到worker下,但这又可能涉及到hadoop的yarn等配置。
2、在spark client的部署机器上再部署一个Dolphinscheduler worker,这样只用考虑 DS本身的配置即可。
我最后选择了方案二。
这里除了要把worker节点的安装文件拷贝到spark client的机器上外,还要注意按照安装中的相关步骤:

创建和其他节点相同的用户,例如dolphinscheduler
将DS安装目录授权给dolphinscheduler用户
修改各个节点的的/etc/hosts文件
创建免密
修改每个DS节点的dolphinscheduler/conf/common.properties文件配置
根据配置文件创建相应的目录,并授权,如/tmp/dolphinscheduler目录
重新配置该worker节点的dolphinscheduler_env.sh文件,添加SPARK_HOME路径。
重启集群。
2、spark-submit执行权限的问题
在任务提交执行的过程中,我的spark测试任务还涉及到对hdfs的操作,所以运行的租户为拥有hdfs权限的bigdata。
运行spark失败,提示:

/opt/soft/spark/bin/spark-submit: Permission denied
1
开始以为是选择的租户不对,但是想了下bigdata和hadoop部署在一起的,而且bidata用户也有spark权限,显然不是用户的问题。那就应该想到spark-submit是执行权限,所以要赋予用户excute权限。

chmod 755 spark
3、明明spark任务执行成功,但是DS界面还是显示失败
运行过程中,发现我的spark任务已经把处理后的文件写入HDFS目录,符合我的任务逻辑。查看日志,显示任务是成功的,但是还是有一个error:

[ERROR] 2021-11-15 16:16:26.012  - [taskAppId=TASK-3-43-72]:[418] - yarn applications: application_1636962361310_0001 , query status failed, exception:{}
java.lang.Exception: yarn application url generation failed
    at org.apache.dolphinscheduler.common.utils.HadoopUtils.getApplicationUrl(HadoopUtils.java:208)
    at org.apache.dolphinscheduler.common.utils.HadoopUtils.getApplicationStatus(HadoopUtils.java:418)
    at org.apache.dolphinscheduler.server.worker.task.AbstractCommandExecutor.isSuccessOfYarnState(AbstractCommandExecutor.java:404)
1
2
3
4
5

这个报错可以看到是DS需要去一个yarn的路径下查询application的状态,拿到这个状态后展示执行结果,但是没有拿到,显然我们就要去看他去哪里拿,能不能配置这个地址。
我查看源码,找到HadoopUtils.getApplicationUrl这个方法

appaddress需要获取一个yarn.application.status.address的配置参数

在源码里找到这个默认配置,虽然它说HA模式保留默认值即可,但是注意我的yarn不是安装在ds1上的,所以这里要修改成自己yarn地址。
将该参数配置到调度spark的worker节点 /opt/soft/dolphinscheduler/conf/common.properties文件

# if resourcemanager HA is enabled or not use resourcemanager, please keep the default value; If resourcemanager is single, you only need to replace ds1 to actual resourcemanager hostname
yarn.application.status.address=http://ds1:%s/ws/v1/cluster/apps/%s
————————————————

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章