GCP Data Proc集群配置优化与Exit status 143错误解决求助
Dataproc集群配置优化与Exit status 143问题解决
问题本质
Exit status 143是JVM进程收到SIGTERM信号被终止,90%以上是**内存资源耗尽(OOM)**或集群资源分配冲突导致系统主动杀死进程,结合你的数据量(3GB、40万行),核心问题是资源配置与节点可用资源不匹配。
针对目标集群(1主3从,2核8GB/节点)的配置方案
先明确Dataproc资源预留规则:每个节点会预留约2GB内存、1核CPU给系统和Dataproc基础服务,剩余资源才会分配给Spark。
1. 集群基础参数
- 集群规模:1主3从,每节点2核8GB内存(对应GCE机型
n1-standard-2) - 单从节点可用资源:CPU=1核,内存≈6GB
2. Spark核心参数配置
- executor core:
1(单节点仅1核可用CPU,避免资源竞争) - executor memory:
4g(预留2GB给堆外开销,防止OOM) - executor memory overhead:
2g(覆盖序列化、网络等堆外内存需求,刚好匹配节点剩余内存) - executor instance:
3(对应3个从节点,每个节点跑1个executor,最大化利用资源) - driver memory:
4g(主节点预留2GB系统资源后剩余6GB,4GB足够处理元数据和结果汇总)
之前大集群(1主4从,16核64GB/节点)的错误修复
你之前的配置存在内存超配:单节点预留后可用内存≈60GB,19g+2g=21g/executor ×3个executor=63GB,超过节点可用内存触发OOM,调整如下:
- executor memory:
18g(单executor总内存18g+2g=20g,3个executor共60GB,匹配节点可用内存) - executor core:保持
5(3个executor共15核,留1核给系统,资源分配合理) - executor instance:保持
3 - driver memory:可提升至
8g(主节点64GB内存,预留后足够分配)
通用问题排查与优化
1. 数据倾斜排查
40万行数据若存在个别key数据量过大,会导致单executor负载过高被杀死:
- 查看Spark UI的Stage页面,检查Task执行时间分布,定位倾斜任务
- 对倾斜key做加盐拆分(比如给key加随机后缀),分散任务负载
2. YARN容器配置校准
确保YARN资源参数匹配节点实际可用资源:
- 2核8GB节点:设置
yarn.nodemanager.resource.memory-mb=6144(6GB)、yarn.nodemanager.resource.cpu-vcores=1 - 16核64GB节点:设置
yarn.nodemanager.resource.memory-mb=61440(60GB)、yarn.nodemanager.resource.cpu-vcores=15
3. 动态资源分配开启
开启Spark动态资源分配,让集群自动调整executor数量,避免资源浪费或不足:
spark.dynamicAllocation.enabled=true spark.dynamicAllocation.minExecutors=1 spark.dynamicAllocation.maxExecutors=3
集群创建命令示例(目标集群)
gcloud dataproc clusters create your-cluster-name \ --region us-central1 \ --master-machine-type n1-standard-2 \ --master-boot-disk-size 50GB \ --num-workers 3 \ --worker-machine-type n1-standard-2 \ --worker-boot-disk-size 50GB \ --properties spark:spark.executor.cores=1,spark:spark.executor.memory=4g,spark:spark.executor.memoryOverhead=2g,spark:spark.executor.instances=3,spark:spark.driver.memory=4g
内容的提问来源于stack exchange,提问作者Data86
相关产品推荐
相关产品推荐

