【发布时间】:2017-11-29 20:26:45
【问题描述】:
我正在尝试从 shell 脚本提交 Spark 作业。
它是一个简单的脚本,只有 spark-submit 命令。我试图通过 spark-submit 命令为我的 Main 函数提供一个参数,但是当我尝试执行 shell 文件时,作业失败并出现错误:
scala.MatchError: rma (of class java.lang.String)
因为我在我的代码中使用了匹配大小写。
这是我的 Shell 脚本的内容
#adsName=$1
spark-submit --class TestQuery --master yarn --deploy-mode cluster \
--driver-memory 12G --executor-memory 8G --executor-cores 4 \
--num-executors 100 --files /opt/mapr/spark/spark-2.1.0/conf/hive-site.xml \
--jars /users/myuser/config-1.2.0.jar \
/users/myuser/jars/adsoptimization_2.11-0.1.jar \
xyz
所以'xyz'是我在命令中传递的字符串。目前我已经硬编码它仍然无法正常工作我想动态地将它作为参数传递给 shell 文件。
我在main函数中的代码:
args(0) match {
case "str1" => TestQuery(spark).runstr1
case "xyz" => TestQuery(spark).runxyz
case "str2" => TestQuery(spark).runstr2
case "str3" => TestQuery(spark).runstr3
}
所以我传递的“xyz”字符串将出现在 args(0) 中(然后我通过将 spark 会话对象作为 args 传递来调用我的案例类中定义的函数)
所以这里的问题是如何简单地通过 shell 脚本运行 spark 作业
【问题讨论】:
-
你能做
args.foreach(println)before模式匹配表达式吗?您将知道传递为args的内容。另外,用SPARK_PRINT_LAUNCH_COMMAND=1启动你的shell 脚本,看看spark-submit究竟执行了什么。这应该足以让您找到根本原因。
标签: apache-spark apache-spark-sql