知道火花中广播变量的大小

时间:2016-12-27 09:02:20

标签: scala apache-spark size broadcast

我已经在spark(scala)中广播了一个变量,但由于数据的大小,它提供了输出

WARN TaskSetManager: Lost task 2.0 in stage 0.0 (TID 2, 10.240.0.33): java.lang.OutOfMemoryError: GC overhead limit exceeded
    at java.lang.StringCoding$StringDecoder.decode(StringCoding.java:149)

在较小的数据库上运行时,它可以正常工作。我想知道这个广播变量的大小(以mb / gb为单位)。有没有办法找到这个?

2 个答案:

答案 0 :(得分:1)

这是因为驱动程序内存不足。默认情况下,这是1g,可以使用--driver-memory 4g来增加此值。默认情况下,Spark会在<10m时广播一个数据帧,尽管我发现广播更大的数据帧也不是问题。这可能会显着加快连接速度,但是当数据帧变得太大时,由于将所有数据广播到不同的执行程序的开销,它甚至可能会降低连接操作的速度。

您的数据源是什么?当表被读入Spark时,在sql选项卡下然后打开正在执行的查询的dag图,应该给出一些关于行数和大小的元数据。否则,您还可以使用hdfs dfs -du /path/to/table/检查hdfs上的实际大小。

希望这有帮助。

答案 1 :(得分:1)

假设您正在尝试广播obj,您可以按如下方式找到它的大小:

import org.apache.spark.util.SizeEstimator

val objSize = SizeEstimator.estimate(obj)

请注意,这是一个估算器,这意味着它不是100%正确