linux - 显然由于 "spark-submit"参数(具有 * 通配符)未扩展,无法通过系统调用从 scala 中调用 "--jars"

标签 linux scala shell apache-spark spark-submit

“spark-submit”调用在 shell 中运行良好

/bin/bash -c '/local/spark-2.3.1-bin-hadoop2.7/bin/spark-submit --class analytics.tiger.agents.spark.Orsp --master spark://analytics.broadinstitute.org:7077 --deploy-mode client --executor-memory 1024m --conf spark.app.id=Orsp --conf spark.executor.extraJavaOptions=-Dconfig.file=/home/unix/analytics/TigerETL3/application.conf --conf spark.driver.extraJavaOptions=-Dconfig.file=/home/unix/analytics/TigerETL3/application.conf --jars "/home/unix/analytics/TigerETL3/spark-jars/*.jar" /home/unix/analytics/TigerETL3/spark-agents.jar'

然而,当我只是将它转换为 Scala 中的系统调用时:

val cmd = Seq("/bin/bash", "-c", s"""/local/spark-2.3.1-bin-hadoop2.7/bin/spark-submit --class analytics.tiger.agents.spark.Orsp --master spark://analytics.broadinstitute.org:7077 --deploy-mode client --executor-memory 1024m --conf spark.app.id=Orsp --conf spark.executor.extraJavaOptions=-Dconfig.file=/home/unix/analytics/TigerETL3/application.conf --conf spark.driver.extraJavaOptions=-Dconfig.file=/home/unix/analytics/TigerETL3/application.conf --jars "/home/unix/analytics/TigerETL3/spark-jars/*.jar" /home/unix/analytics/TigerETL3/spark-agents.jar""")
import scala.sys.process._
val log = cmd.lineStream.toList
println(log.mkString)

抛出一个错误

Warning: Local jar /home/unix/analytics/TigerETL3/spark-jars/*.jar does not exist, skipping.
Exception in thread "main" java.lang.NoClassDefFoundError: scalikejdbc/DB
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
        at java.lang.Class.getMethod0(Class.java:3018)
        at java.lang.Class.getMethod(Class.java:1784)
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:739)
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180)
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:119)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: scalikejdbc.DB
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 10 more

异常表明 *.jars 模式由于某种原因没有被扩展(即使它在 shell 中工作正常)。 枚举 CSV 列表中的所有 jar 不是很吸引人,这将是一个怪物——187 个 jar 。 我已经尝试过任何我能想到的技巧,但都惨遭失败,好久没有这么沮丧了。

感谢帮助! 谢谢

最佳答案

您需要在指定 --jars 时删除双引号 ""。你能试试这个吗?

val cmd = Seq("/bin/bash", "-c", s"""/local/spark-2.3.1-bin-hadoop2.7/bin/spark-submit --class analytics.tiger.agents.spark.Orsp --master spark://analytics.broadinstitute.org:7077 --deploy-mode client --executor-memory 1024m --conf spark.app.id=Orsp --conf spark.executor.extraJavaOptions=-Dconfig.file=/home/unix/analytics/TigerETL3/application.conf --conf spark.driver.extraJavaOptions=-Dconfig.file=/home/unix/analytics/TigerETL3/application.conf --jars /home/unix/analytics/TigerETL3/spark-jars/*.jar /home/unix/analytics/TigerETL3/spark-agents.jar""")
import scala.sys.process._
val log = cmd.lineStream.toList
println(log.mkString)

关于linux - 显然由于 "spark-submit"参数(具有 * 通配符)未扩展,无法通过系统调用从 scala 中调用 "--jars",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53073014/

相关文章:

android - 如何设置Android环境变量让app继承?

arrays - 使用排序对数组数组进行升序和降序排序

c - 为什么我的设备驱动程序不打印我输入的内容

linux - 使用 bash 脚本读取数字

linux - 递归禁用 CONFIG 对 linux 内核构建的依赖

Scalatest 或 Specs2 - 在并行运行的测试中设置和拆卸变量

Scala 递归没有副作用

bash - 我可以以编程方式在 bash 脚本中包含参数吗?

linux - shell 脚本中的 while 循环在 linux bash shell 中不起作用

linux - 为什么 Linux 启动时会为根目录 "/"初始化一些 dentry