使用Shell脚本文件提交Spark作业

时间:2017-11-29 20:26:46

标签: apache-spark apache-spark-sql

我正在尝试从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文件。

我在主函数中的代码:

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传递来调用我的case类中定义的函数)

所以这里的问题是如何通过shell脚本

简单地运行spark作业

1 个答案:

答案 0 :(得分:0)

传入没有匹配模式的值时会出现错误。你传递了rma,但你没有案件。只需添加此...

args(0) match  {
  case "str1" => TestQuery(spark).runstr1
  case "xyz" => TestQuery(spark).runxyz
  case "str2" => TestQuery(spark).runstr2
  case "str3" => TestQuery(spark).runstr3
  case _ => TestQuery(spark).someDefaultDefined
}