我目前已经在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?
1条答案
按热度按时间vsnjm48y1#
您可以使用计算资源配额来限制在命名空间中运行的pod可以消耗多少cpu和内存。
limits.cpu
:在所有处于非终端状态的pod中,cpu限制的总和不能超过此值。limits.memory
:在所有处于非终端状态的pod中,内存限制的总和不能超过此值。requests.cpu
:在所有处于非终端状态的pod中,cpu请求的总和不能超过此值。requests.memory
:在所有处于非终端状态的pod中,内存请求的总和不能超过此值。