因此,既然k8s在2.3中直接与spark集成,我从控制台提交的spark在kuberenetes主机上正确执行,而没有运行任何spark master pods,spark处理了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。以前我直接通过spark master REST API使用命令(不使用kubernetes):
^{pr2}$而且成功了。现在,我想集成Kubernetes并以类似的方式进行集成,我从python向Kubernetes集群提交一个API请求,并让spark处理k8s的所有细节,理想情况下类似于:
request = requests.Request(
'POST',
"k8s://https://myK8scluster.com:443",
data=json.dumps(parameters))
在Spark 2.3/Kubernetes集成中有可能吗?在
如果使用本地Kubernetes支持,恐怕spark2.3是不可能的。在
根据deployment instruction中的描述,提交过程容器有几个步骤:
所以,事实上,你没有地方提交一份工作,直到你开始一个提交过程,这将启动一个第一个Spark的pod(驱动程序)。在应用程序完成后,一切都终止了。在
因为在AWS Lambda上运行一个fat容器并不是一个最佳的解决方案,而且还因为if不是在容器中运行任何命令的方法(这是可能的,但是对于hack,这里是关于在AWS Lambda中执行Bash的blueprint)最简单的方法是编写一些小型的自定义服务,它将在AWS Lambda之外的机器上工作,并在应用程序和
spark-submit
实用程序之间提供REST接口。我看不出任何其他的方法可以让它不痛苦。在相关问题 更多 >
编程相关推荐