部署模式客户端中的spark-submit未读取所有jar

时间:2016-06-03 14:11:06

标签: apache-spark jar submit

我正在尝试通过spark-submit命令将应用程序提交到我的spark集群(独立模式)。我正在关注 official spark documentation,以及依赖this other one。现在问题是我得到了奇怪的行为。我的设置如下:

  • 我有一个目录,其中我的应用程序的所有依赖项都位于/home/myuser/jars
  • 我的应用程序的jar位于同一目录(/home/myuser/jars)中,名为dat-test.jar
  • dat-test.jar中的入口点类位于包路径my.package.path.Test
  • Spark master位于spark://master:7077

现在,我直接在主节点上提交应用程序,因此使用client部署模式,运行命令

./spark-submit --class my.package.path.Test --master spark://master:7077 --executor-memory 5G --total-executor-cores 10 /home/myuser/jars/*

我收到错误

java.lang.ClassNotFoundException: my.package.path.Test

如果我激活verbose模式,我看到的是primaryResource被选为包含入口点的jar是/home/myuser/jars/中按字母顺序排列的第一个jar(不是{ {1}}),领导(我赞成)dat-test.jar。无论如何,同一目录中的所有jar都作为参数加载。

当然如果我跑

ClassNotFoundException

它找到./spark-submit --class my.package.path.Test --master spark://master:7077 --executor-memory 5G --total-executor-cores 10 /home/myuser/jars/dat-test.jar类,但它找不到其他jar中包含的其他类。最后,如果我使用Test标志并运行

--jars

我获得与第一个选项相同的结果。 ./spark-submit --class my.package.path.Test --master spark://master:7077 --executor-memory 5G --total-executor-cores 10 --jars /home/myuser/jars/* /home/myuser/jars/dat-test.jar中的第一个jar加载为/home/myuser/jars/,导致primaryResource ClassNotFoundException。如果我添加my.package.path.Test,则相同。

重点是:

  • 出于开发原因,我不希望有一个包含所有依赖项的jar
  • --jars /home/myuser/jars/*.jar中的罐子很多。我想知道是否有办法将它们全部包含在内而不是使用逗号分隔语法
  • 如果我尝试在主节点上使用/home/myuser/jars/运行相同的命令,我不会收到错误,但由于其他一些原因导致计算失败(但这是另一个问题)。

那么在客户端模式下运行spark-submit的正确方法是什么? 感谢

1 个答案:

答案 0 :(得分:0)

无法使用--jars选项包含所有jar,您必须创建一个小脚本来枚举它们。这部分有点次优。