所以现在k8s直接与spark集成在一起2.3我从控制台提交的火花正确地在kuberenetes主机上执行而没有任何火花主机吊舱运行,火花处理所有k8s细节:
spark-submit \
--deploy-mode cluster \
--class com.app.myApp \
--master k8s://https://myCluster.com \
--conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
--conf spark.app.name=myApp \
--conf spark.executor.instances=10 \
--conf spark.kubernetes.container.image=myImage \
local:///myJar.jar
我要做的是通过AWS lambda向我的k8s群集做一个spark-submit。以前我通过spark master REST API直接使用命令(没有kubernetes):
request = requests.Request(
'POST',
"http://<master-ip>:6066/v1/submissions/create",
data=json.dumps(parameters))
prepared = request.prepare()
session = requests.Session()
response = session.send(prepared)
它有效。现在我想集成Kubernetes,并且我可以类似地从python向我的kubernetes集群提交API请求,并且可以处理所有k8s的详细信息,理想情况如下:
request = requests.Request(
'POST',
"k8s://https://myK8scluster.com:443",
data=json.dumps(parameters))
是否可以在Spark 2.3 / Kubernetes集成中使用?
答案 0 :(得分:2)
如果您使用本地Kubernetes支持,我担心Spark 2.3是不可能的。
根据deployment instruction的说明,提交流程容器的几个步骤:
因此,事实上,在您开始提交流程之前,您无法提交工作,这将为您启动第一个Spark的pod(驱动程序)。应用程序完成后,一切都会终止。
由于在AWS Lambda上运行胖容器不是最好的解决方案,而且因为如果不能在容器本身中运行任何命令(可能,但是使用hack,这里有关于执行的blueprint在AWS Lambda中进行Bash最简单的方法是编写一些小型自定义服务,该服务可以在AWS Lambda之外的机器上运行,并在您的应用程序和spark-submit
实用程序之间提供REST接口。我没有看到任何其他方法可以毫不费力地实现它。