zoukankan      html  css  js  c++  java
  • 关于Spark中的常见问题及解决方法(3) —— Aggregations操作

    前言

    如果你程序中的聚合速度较慢,请先查看 Spark Stragglers/任务执行缓慢部分。

    主要症状

    • 在执行 groupby 操作时,任务执行缓慢
    • 聚合操作的后序操作也很缓慢

    可能的原因

    这类问题并没有固定的解决方法。 有时候,由于作业中的数据有一些偏斜的键(即数据倾斜),导致作业执行缓慢。

    可能的解决方法

    • 在聚合之前增加分区数量可能有助于减少每个任务中处理的不同键的数量。
    • 增加Executor的内存也可以帮助缓解这个问题。 如果键有大量数据,这将允许Executor尽量在内存内进行计算而避免溢出到磁盘。
    • 如果聚合之后的任务也很慢,这意味着聚合后的数据集可能仍然不平衡。 尝试插入重新分区调用以随机分区。
    • 在聚合操作之前使用SELECT等操作过滤选出需要处理的数据,避免处理无关的数据。 Spark的查询优化器将自动为结构化API执行此操作。
    • 确保数据中的空值被正确表示(使用Spark的null概念)而不是像”“或”EMPTY“那样的默认值。 Spark通常会尽可能优化,在作业早期跳过空值,但对于其他自定义的占位符值,并没有这样的优化机制
    • 有些聚合函数本身也比其他函数慢。 例如,collect_listcollect_set 是非常慢的聚合函数,因为它们必须将所有匹配的对象返回给驱动程序,应该在性能关键代码中避免使用。

    参考资料

    [[BOOK]]Spark - The Definitive Guide](http://shop.oreilly.com/product/0636920034957.do)

  • 相关阅读:
    JQuery判断checkbox是否选中-批量
    浮动跟随
    当天时间戳范围
    统计兼职人员打标签数量
    submit回车提交影响
    js 数组去除空值
    js循环
    ajax
    滚动条位置
    oc基础-set和get方法的使用
  • 原文地址:https://www.cnblogs.com/lestatzhang/p/10625486.html
Copyright © 2011-2022 走看看