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

通过日志查看调度过程就会很清楚的看到,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

开始以为是选择的租户不对,但是想了下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)

在这里插入图片描述
这个报错可以看到是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
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐