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
————————————————

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