[英]Spark-submit throwing error from yarn-cluster mode
當我們在yarn-cluster上提交spark作業時,我們如何將配置文件傳遞給executor?
如果我將我的下面的spark-submit命令更改為--master yarn-client,那么它工作正常,我得到各自的輸出
spark-submit\
--files /home/cloudera/conf/omega.config \
--class com.mdm.InitProcess \
--master yarn-cluster \
--num-executors 7 \
--executor-memory 1024M \
/home/cloudera/Omega.jar \
/home/cloudera/conf/omega.config
我的火花代碼:
object InitProcess
{
def main(args: Array[String]): Unit = {
val config_loc = args(0)
val config = ConfigFactory.parseFile(new File(config_loc ))
val jobName =config.getString("job_name")
.....
}
}
我收到以下錯誤
17/04/05 12:01:39 ERROR yarn.ApplicationMaster: User class threw exception: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'job_name'
com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'job_name'
有人可以幫我在--master yarn-cluster中運行這個命令嗎?
yarn-client
和yarn-cluster
之間的區別在於,在yarn-client
,驅動器位置在運行spark-submit
命令的機器上。
在您的情況下,配置文件的位置是/home/cloudera/conf/omega.config
,當您作為yarn-client
運行時可以找到它,因為驅動程序正在從保存此完整/路徑/到/的當前計算機運行文件。
但是無法在yarn-cluster
模式下訪問,因為驅動程序正在其他主機上運行,而該主機不保存此完整/路徑/到/文件。
我建議按以下格式執行命令:
spark-submit\
--master yarn-cluster \
--num-executors 7 \
--executor-memory 1024M \
--class com.mdm.InitProcess \
--files /home/cloudera/conf/omega.config \
--jar /home/cloudera/Omega.jar omega.config
使用帶有完整路徑名的--files發送配置文件,並將其作為參數提供給jar文件名(不是完整路徑),因為文件將被下載到工作者的未知位置。
在您的代碼中,您可以使用SparkFiles.get(filename)
來獲取工作服務器上下載文件的實際完整路徑名
代碼中的更改應類似於:
val config_loc = SparkFiles.get(args(0))
公共類SparkFiles
解析通過SparkContext.addFile()添加的文件的路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.