Spark 并行读取但写入分区时仅使用单核的解决方案

花韻仙語
发布: 2025-08-08 16:12:36
原创
349人浏览过

spark 并行读取但写入分区时仅使用单核的解决方案

本文针对 Spark 在本地模式下读取 CSV 文件并写入 Iceberg 表时,读取阶段能够并行执行,而写入阶段却只能单核运行的问题,提供了详细的解决方案。通过调整 Spark 配置,例如禁用动态资源分配、显式设置 executor 数量和资源,以及优化 AWS CLI 配置,可以有效提升写入性能,实现并行写入。

在使用 Spark 处理大规模数据时,我们经常会遇到读取速度快,但写入速度慢的问题。尤其是在本地模式下,虽然 Spark 能够利用多核并行读取数据,但在写入分区时,却可能退化为单核运行,导致整体性能瓶颈。本文将针对这一问题,提供详细的解决方案和优化建议。

理解问题根源

在本地模式下,Spark 默认只有一个 Executor,即本地 JVM 实例。虽然读取操作可以利用多线程并行执行,但写入操作往往受限于单个 Executor 的资源限制。动态资源分配(spark.dynamicAllocation.enabled)在这种情况下可能不会起到预期效果,甚至可能将所有任务分配给单个 Executor。

解决方案:显式配置 Executor 资源

避免依赖动态资源分配,而是显式地配置 Executor 的数量和资源,可以有效解决单核写入的问题。

  1. 禁用动态资源分配:

    移除 spark.dynamicAllocation.enabled = true 的配置。

  2. 显式设置 Executor 数量和资源:

    在提交 Spark 应用时,通过命令行参数设置 Executor 的数量、内存和 CPU 核心数。例如:

    spark-submit \
    --master yarn \
    --deploy-mode cluster \
    --num-executors 4 \
    --executor-memory 1G \
    --executor-cores 1 \
    --driver-memory 2G \
    --driver-cores 1 \
    ...
    登录后复制
    • --num-executors: 设置 Executor 的数量。
    • --executor-memory: 设置每个 Executor 的内存大小。
    • --executor-cores: 设置每个 Executor 的 CPU 核心数。

    注意:需要根据集群的资源情况和数据规模,合理调整这些参数。可以通过 Yarn Resource Manager UI 监控 CPU 核心的利用率,进行微调。

  3. 监控 Spark History Server UI:

    在写入操作开始时,通过 Spark History Server UI 检查 Executor 的数量和 Task 的数量,确保任务能够均匀分配到各个 Executor 上。

    Poixe AI
    Poixe AI

    统一的 LLM API 服务平台,访问各种免费大模型

    Poixe AI 61
    查看详情 Poixe AI

优化 AWS CLI 配置

如果数据写入目标是 AWS S3,还可以通过优化 AWS CLI 的配置,提升写入性能。

  1. 增加并行度:

    通过设置 max_concurrent_requests 和 max_queue_size 参数,增加并发请求的数量和任务队列的大小。

    [default]
    s3 =
        max_concurrent_requests = 20
        max_queue_size = 1000
    登录后复制
  2. 调整分片上传参数:

    通过设置 multipart_threshold 和 multipart_chunksize 参数,优化分片上传的策略。

    [default]
    s3 =
        multipart_threshold = 64MB
        multipart_chunksize = 16MB
    登录后复制
  3. 限制带宽(可选):

    如果需要限制上传带宽,可以通过设置 max_bandwidth 参数实现。

    [default]
    s3 =
        max_bandwidth = 100MB/s
    登录后复制

    注意:这些参数需要在 AWS CLI 的配置文件中进行设置,通常位于 ~/.aws/config。

总结

通过显式配置 Executor 资源和优化 AWS CLI 配置,可以有效解决 Spark 在本地模式下写入分区时仅使用单核的问题,显著提升写入性能。在实际应用中,需要根据具体的硬件环境和数据规模,进行参数调优,以达到最佳效果。此外,监控 Spark History Server UI 和 Yarn Resource Manager UI,可以帮助我们更好地了解任务的执行情况,并及时发现潜在的问题。

以上就是Spark 并行读取但写入分区时仅使用单核的解决方案的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号