来自Python

时间:2018-03-13 18:24:00

标签: python apache-spark kubernetes aws-lambda

所以现在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集成中使用?

1 个答案:

答案 0 :(得分:2)

如果您使用本地Kubernetes支持,我担心Spark 2.3是不可能的。

根据deployment instruction的说明,提交流程容器的几个步骤:

  1. Spark创建一个在Kubernetes pod中运行的Spark驱动程序。
  2. 驱动程序创建的执行程序也在Kubernetes pod中运行并连接到它们,并执行应用程序代码。
  3. 当应用程序完成时,执行程序窗格会终止并清理,但驱动程序窗格会保留日志并在Kubernetes API中保持“已完成”状态,直到它最终被垃圾收集或手动清理。
  4. 因此,事实上,在您开始提交流程之前,您无法提交工作,这将为您启动第一个Spark的pod(驱动程序)。应用程序完成后,一切都会终止。

    由于在AWS Lambda上运行胖容器不是最好的解决方案,而且因为如果不能在容器本身中运行任何命令(可能,但是使用hack,这里有关于执行的blueprint在AWS Lambda中进行Bash最简单的方法是编写一些小型自定义服务,该服务可以在AWS Lambda之外的机器上运行,并在您的应用程序和spark-submit实用程序之间提供REST接口。我没有看到任何其他方法可以毫不费力地实现它。