我正在运行一项将wikidaa和维基百科页面浏览量结合起来的工作,并且我正在使用一个由两到三个节点组成的小型Google集群。我的问题是大多数情况下一个节点完全空闲,尽管我试图在开始作业之前通过对许多分区中的数据进行分区来提高并行性。此外,我根据 Spark 的并行度参数对数据进行重新分区,但无论我尝试什么,都只有一个节点始终在使用中。
我最后的努力是以下脚本,它没有做太多。它提高了工作节点的性能,但空闲节点仍处于空闲状态。
我用于运行作业的脚本如下:
gcloud dataproc clusters create mycluster
--zone europe-west1-b
--master-machine-type n1-standard-8
--master-boot-disk-size 500
--num-workers 2
--worker-machine-type n1-standard-16
--worker-boot-disk-size 500
--scopes 'https://www.googleapis.com/auth/cloud-platform'
--project myproject
gcloud dataproc jobs submit spark --cluster mycluster
--class Main
--properties
spark.driver.memory=38g,
spark.driver.maxResultSize=1g,
spark.executor.memory=45g,
spark.driver.cores=4,
spark.executor.cores=16,
spark.dynamicAllocation.enabled=true,
spark.shuffle.service.enabled=true,
spark.dynamicAllocation.minExecutors=32,
spark.executor.heartbeatInterval=36000s,
spark.network.timeout=86000s,
spark.default.parallelism=1000,
spark.driver.extraJavaOptions=-XX:+UseConcMarkSweepGC,
spark.executor.extraJavaOptions=-XX:+UseConcMarkSweepGC
--files /path/to/file/properties.properties
--jars myjar.jar
customArg1=value1
flagA=false
flagB=true
一个节点保持空闲状态,因为它正在运行 YARN AppMaster,并且没有足够的空间留给执行器。
如果设置spark.yarn.am.memory=1g,spark.yarn.am.memoryOverhead=384
,则应使用所有节点。
有关详细信息,请参阅此文档。
除了帕特里克·克莱的答案之外,首先,这里有一些引用:
"每个容器集群都有一个主端点,由容器引擎管理。主节点提供了集群的统一视图,并且通过其可公开访问的端点,是与集互的门户。
我遇到了同样的问题(除了 gcloud container cluster ..
(,为了让我为每个节点调度并运行一个 pod,即使在主节点影响可见的小型集群上,我也必须设置 CPU 限制以便它可以运行
这是我的pod.json(跳过了一些东西(:
{
"kind": "Pod",
"apiVersion": "v1",
"spec": {
"containers": [
{
"resources": {
"limits": {
"cpu": "700m"
}
}
}
],
}
}