在AWS EMR上用Hive、Spark、Airflow构建一个高效的ETL程序-内存配置:合理配置 Spark 任务的内存分配,避免因内存不足导致的垃圾回收频繁或 OOM 错误。调整以下参数: spark.executor.memory:每个 Executor 的内存大小。 spark.driver.memory:Driver 的内存大小。 spark.memory.fraction:用于存储缓存数据的内存比例。 数据缓存:对于重复使用的数据集,可以使用 cache 或 persist 将数据存储在内存中,减少磁盘 I/O 操作。 垃圾回收调优:Spark 的 JVM 堆内存管理可能影响性能,调节 JVM 的垃圾回收参数可以提高性能。比如,增加 spark.executor.extraJavaOptions 来优化 GC(垃圾回收)设置。 避免不必要的 Shuffle 操作

  • Shuffle 操作会导致网络 I/O,增加计算延迟。为了减少 shuffle 操作,应该尽量避免以下场景:

    • 不必要的 groupBy:只有在需要进行聚合或分组时,才进行 groupBy 操作。
    • 避免多次 shuffle:可以通过调整作业中的计算顺序或使用 coalesce() 将多个分区合并成一个,减少 shuffle 操作。
    • 缓存中间结果:对于需要多次 shuffle 的中间结果,可以考虑缓存它们,以避免多次计算。
  • 上一篇:springboot集成elasticsearch实现文字和文档搜索


    下一篇:148 排序链表