火花和隔离所花费的时间

问题描述 投票:2回答:1

我最近开始使用Spark处理大量数据(〜1TB)。并且也能够完成工作。但是,我仍在尝试了解其工作原理。请考虑以下情形:

  1. 设置参考时间(例如t ref

  2. 执行以下两项任务之一:

    a。使用SciSpark将数万个文件中的大量数据(〜1TB)读入RDD(或)]

    b。如上所述读取数据,并进行其他预处理工作,并将结果存储在DataFrame中]

  3. 打印RDD或DataFrame的大小(如果适用,将时差wrt转换为t ref(即t 0a / t 0b]

  4. )>
  5. 进行一些计算
  6. 保存结果

换句话说,1b处理完与1a完全相同的RDD后,将创建一个DataFrame。

我的查询如下:

推断t 0b – t 0a =预处理所需的时间是否正确?在哪里可以找到相同的可靠参考?

编辑:为问题的来源添加了说明...

我的怀疑源于Spark的惰性计算方法及其执行异步作业的能力。它可以/是否启动在读取数千个输入文件时可以计算的后续(预处理)任务?怀疑的根源在于令人难以置信的性能(经验证的结果还可以),我认为它看起来太奇妙了,难以置信。

感谢您的答复。

apache-spark performance-testing
1个回答
1
投票

我相信这样的事情可以协助您(使用Scala):

def timeIt[T](op: => T): Float = {
  val start = System.currentTimeMillis
  val res = op
  val end = System.currentTimeMillis
  (end - start) / 1000f
}

def XYZ = {
 val r00 = sc.parallelize(0 to 999999)
 val r01 = r00.map(x => (x,(x,x,x,x,x,x,x)))
 r01.join(r01).count()
}

val time1 = timeIt(XYZ)
// or like this on next line
//val timeN = timeIt(r01.join(r01).count())

println(s"bla bla $time1 seconds.")

您需要发挥创造力,并逐步处理导致实际执行的操作。因此,这具有局限性。惰性评估等。

另一方面,Spark Web UI记录每个动作,并记录该动作的阶段持续时间。

通常:在共享环境中衡量性能是困难的。在嘈杂的群集中,Spark中的动态分配意味着您在阶段中会保留已获取的资源,但是在同一阶段或下一个阶段的连续运行中,您可能会获得较少的资源。但这至少是指示性的,您可以在较不繁忙的时期内运行。

© www.soinside.com 2019 - 2024. All rights reserved.