我正在尝试通过spark-submit命令将应用程序提交到我的spark集群(独立模式)。我正在关注 official spark documentation,以及依赖this other one。现在问题是我得到了奇怪的行为。我的设置如下:
/home/myuser/jars
/home/myuser/jars
)中,名为dat-test.jar
dat-test.jar
中的入口点类位于包路径my.package.path.Test
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
,则相同。
重点是:
--jars /home/myuser/jars/*.jar
中的罐子很多。我想知道是否有办法将它们全部包含在内而不是使用逗号分隔语法/home/myuser/jars/
运行相同的命令,我不会收到错误,但由于其他一些原因导致计算失败(但这是另一个问题)。那么在客户端模式下运行spark-submit的正确方法是什么? 感谢
答案 0 :(得分:0)
无法使用--jars选项包含所有jar,您必须创建一个小脚本来枚举它们。这部分有点次优。