【问题标题】:Apache zepplin spark job runs faster than spark-submitApache zeppelin spark 作业比 spark-submit 运行得更快
【发布时间】:2017-05-12 03:42:21
【问题描述】:

我想知道我在 Zepplin 段落中编写的 spark 作业的执行速度是否比我自己运行 spark-submit 快得多?

我在 Zepplin 和 spark-submit 中基本上使用相同的配置(执行程序、内存),但执行时间有很大差异。

两者都在同一个独立的 Spark 集群上运行。

什么可以解释这种差异?

【问题讨论】:

  • 工作代码是什么?
  • @T.Gawęda 我不认为是代码,可能是因为我使用的是 zepplin spark context(sc),sqlContext 可能与我的 spark conf 不同
  • 您是否考虑了启动/关闭时间?我想 Zeppelin 实例已经在运行,所以没有启动时间。如果您尚未尝试使用内部 Scala 计时

标签: scala apache-spark apache-zeppelin


【解决方案1】:

我能想到两件事可能会导致这种情况。

  1. 使用 zappelin 时,您已经有了一个可能正在使用的 spark 上下文。当您进行 spark-submit 时,您会创建一个新的,这需要一些时间。
  2. 即使您的时间安排忽略了火花上下文(例如,您只计算实际工作的时间),在 zappelin 中,您可能会在当前工作之前做一些其他工作。这些可能会导致发生各种缓存。一些例子包括:

    • OS/hadoop 可能会缓存您正在阅读的文件,因为您在之前的单元格中读取了这些文件
    • 您可能正在对某些 RDD 进行之前所做的随机播放,以便将其缓存
    • 您可能有显式缓存
    • 您可能有一个用于连接的数据框已在前一个单元格中正确分区
    • 名单还在继续……

【讨论】:

  • 是的,我几乎想到了所有这些可能性,但这并不能解释为什么写入 db(大约 1.48 亿条记录)比在 spark-submit 中运行花费的时间要少得多。相同的代码,但在 Zepplin 中编写为不同的段落。我可以在 Spark UI 中看到每个任务需要多长时间。
  • 进行分析时,可以确保加载分析之外的每个外部元素。例如,在您的程序调用 spark.range(100).show() 将加载火花上下文,然后围绕作业本身包装一个计时器。另一方面,在 zepplin 中,确保只运行相关的单元格而不运行其他单元格,然后进行比较。鉴于此,您应该会看到相同的性能。我当然假设您对两个测试使用相同的配置。
猜你喜欢
  • 2018-10-29
  • 2017-03-11
  • 2016-07-20
  • 2019-11-01
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 2016-09-05
相关资源
最近更新 更多