Apache Spark SQL - RDD 内存数据倾斜



>我正在尝试使用缓存表表名;

在此命令之后,表成功缓存,但是我注意到内存中RDD的分区方式存在偏差。

这是我在应用程序主控的"存储"选项卡中看到的内容

rdd_71_1    Memory Deserialized 1x Replicated   1264.7 MB   0.0 B   node4:38759
rdd_71_10   Memory Deserialized 1x Replicated   11.6 MB     0.0 B   node1:58115
rdd_71_11   Memory Deserialized 1x Replicated   25.7 MB     0.0 B   node1:53968
rdd_71_2    Memory Deserialized 1x Replicated   72.6 MB     0.0 B   node4:54133
rdd_71_4    Memory Deserialized 1x Replicated   1260.9 MB   0.0 B   node2:33179
rdd_71_5    Memory Deserialized 1x Replicated   56.8 MB     0.0 B   node2:54222
rdd_71_7    Memory Deserialized 1x Replicated   54.5 MB     0.0 B   node4:34149
rdd_71_8    Memory Deserialized 1x Replicated   1277.8 MB   0.0 B   node1:43572
rdd_71_9    Memory Deserialized 1x Replicated   1255.8 MB   0.0 B   node1:58518

请注意,某些分区的范围为 11MB 到 72MB,而其他分区的范围为 ~1200MB

即使我不缓存表,而只是简单地从磁盘处理,我看到某些任务比其他任务完成得早得多,这进一步证实了我对偏度的猜测。

这是怎么回事?如何避免这种数据偏差?

PS : 表格以ORC格式存储

我不完全知道为什么直接从磁盘读取时您的数据会偏斜。但是,我发现repartition数据以平衡分区的大小并避免被单个长期任务拖累通常很有用。我建议阅读 https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch04.html 的最后一部分("数据分区(高级)"部分),其中提供了一些不错的提示:)

相关内容

  • 没有找到相关文章

最新更新