如何在每个命名空间的资源有限的kubernetes上运行spark

63lcw9qa  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(455)

我目前已经在k8s中使用helm建立了spark独立集群。它有固定数量的工人(5个工人)和一个主控。目前正在进行spark提交,如下所示

spark-submit --class LogParser.LogBundleConfigFetcher --conf spark.submit.deployMode=cluster --conf spark.network.timeout=300 --conf spark.scheduler.mode=FAIR --conf**spark.master=spark://sm-care-alice-staging:7077**--conf spark.executor.cores=5 --conf spark.executor.memory=20g --conf spark.dynamicAllocation.maxExecutors=3 --conf spark.driver.memory=16g --conf spark.dynamicAllocation.enabled=false --conf spark.cores.max=15 http://minio.platform.svc.cluster.local:9000/alice-care/staging/config/spark/aliceparser.jar

但是它有一些限制,比如我们不能对pyspark使用集群模式-集群部署模式目前不支持独立集群上的python应用程序
所以,我想使用k8s作为集群管理器。但是我们有一个巨大的k8s集群,每个项目分配的资源有限(由名称空间分配)。使用k8s作为集群管理器将动态生成pod,因此我们无法控制资源(我知道我们可以控制示例,但是在多个spark submit的情况下,我们必须将其限制在内核和内存的限制内)。

spark-submit \
    --master k8s://https://$(k8s_ip):8443 \
    --deploy-mode cluster \
    --name spark-example \
    --conf spark.executor.instances=5 \
    --conf spark.kubernetes.container.image=pyspark-k8s-example:2.4.1 \
    --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
    --conf spark.kubernetes.pyspark.pythonVersion=3 \
    /usr/bin/run.py

我想知道我们如何控制k8s集群管理器来限制资源,也就是说,无论调用多少spark submit,核心数都限制在100。
或者有没有其他方法可以在相同的设置中以集群模式运行pyspark?

vsnjm48y

vsnjm48y1#

您可以使用计算资源配额来限制在命名空间中运行的pod可以消耗多少cpu和内存。 limits.cpu :在所有处于非终端状态的pod中,cpu限制的总和不能超过此值。 limits.memory :在所有处于非终端状态的pod中,内存限制的总和不能超过此值。 requests.cpu :在所有处于非终端状态的pod中,cpu请求的总和不能超过此值。 requests.memory :在所有处于非终端状态的pod中,内存请求的总和不能超过此值。

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
  namespace: spark-ns
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi

相关问题