我有一个仅由一个VM(minikube集群)组成的Kubernetes集群。
在此集群上,我有一个Spark Master和两个Workers在运行。我已经通过以下方式设置了Ingress插件(我的spark组件使用默认端口):
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: minikube-ingress
annotations:
spec:
rules:
- host: spark-kubernetes
http:
paths:
- path: /web-ui
backend:
serviceName: spark-master
servicePort: 8080
- path: /
backend:
serviceName: spark-master
servicePort: 7077
然后我将我的k8s IP添加到了/etc/hosts
[MINIKUBE_IP] spark-kubernetes
我能够通过http://spark-kubernetes/web-ui
连接到Master webui:
我现在想提交存储在本地计算机上的JAR(例如,火花示例)。我希望此命令能正常工作:
./bin/spark-submit \
--master spark://spark-kubernetes \
--deploy-mode cluster \
--class org.apache.spark.examples.SparkPi \
./examples/jars/spark-examples_2.11-2.4.0.jar
但是出现以下错误:
2019-04-04 08:52:36 WARN SparkSubmit$$anon$2:87 - Failed to load .
java.lang.ClassNotFoundException:
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.util.Utils$.classForName(Utils.scala:238)
at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:810)
at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:167)
at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:195)
at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:924)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:933)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
我做错了什么?
注意:
答案 0 :(得分:2)
要使其工作,请使用分发jar的客户端模式(--deploy-mode client
)或在容器映像中指定jar文件的路径。因此,不要使用
./examples/jars/spark-examples_2.11-2.4.0.jar
,
使用类似:
/opt/spark/examples/jars/spark-examples_2.11-2.4.0.jar
(取决于您使用的图像)
还要检查我的spark运算符是否有K8:https://github.com/radanalyticsio/spark-operator:)