优化火花低挂水果,特别是催化剂优化和火花配置

时间:2017-12-06 02:05:01

标签: scala apache-spark apache-spark-sql spark-dataframe apache-spark-2.0

我正在使用Spark 2.1.1,我正在使用Scala API,尽管语言不那么重要。我有兴趣以有效的方式优化火花查询/管道。我已经阅读了很多材料(包括伟大的“学习星火”书,我对Spark siteJacek Laskowski's blog和其他人非常熟悉,而且我已经开始使用它了几乎两个年。

然而,有太多的信息和概念需要注意,而且我没有做足够的优化来了解它们。不幸的是,一旦一切工作100%,可能只需要几天甚至几小时才能交付代码。我需要优先考虑我可以应用的修复程序。我之前已经优化了工作火花代码,但我正在寻找最好的整体策略以及尝试熟悉最好的低挂水果。总有一天,我会记住所有要调整的旋钮,但至少现在有十个非常好的旋钮。我目前认为重要的一些事情是(不是按顺序排列,但前4个恰好是我认为最重要的)...

  1. 开发 - 通过重新分区数据集或从一个分块的配置单元表中检索来减少随机播放(交换)。
  2. 策略 - 查看Spark UI以查看哪个作业和舞台花费的时间最长,并且仔细观察那个。
  3. 开发 - 尽可能在加入之前过滤数据集,以避免创建高基数“多对多”连接,并避免在连接期间发送更多数据。
  4. 配置 - 偶数executors and memory properly
  5. 开发 - 尽可能远离笛卡尔积和theta-join。
  6. 开发 - 如果可能,在创建UDF之前使用spark库函数。
  7. 开发 - 如果表足够小,请尝试强制进行广播散列连接。
  8. 策略 - 除非有特定原因(这意味着我从不使用RDD API),否则切勿使用RDD API代替数据集/数据帧。
  9. 开发 - 构建数据集过滤器,以便下推谓词可以使用它们(制作更多,更简单的过滤器而不是多条件过滤器)。
  10. 战略&开发 - 始终保持Spark源代码打开,以便更容易找到类型声明和其他代码实现。
  11. 我错过的东西......
  12. 对我来说最有趣的增强功能是那些通过查看查询计划或DAG可视化而显而易见的增强功能。此外,使火花用户/开发人员走向“啊哈!”的老生常谈您可能愿意分享。 免责声明:以上十件事对我来说并不完全是“十大”,比如使用火花库函数代替UDF并不是非常重要(至少不是十大),但我想帮忙给出一个好的提示可能对某人有什么样子的例子。

0 个答案:

没有答案