Apache Spark SQL - RDD内存中数据偏差

时间:2015-04-29 10:39:03

标签: apache-spark rdd apache-spark-sql

我试图使用内存缓存Hive Table CACHE TABLE tablename;

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

这就是我在" Storage"中看到的内容。应用程序主机上的选项卡

Graphics#drawImage()

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

即使我没有缓存表格,只是简单地从磁盘处理,我发现有些任务比其他任务更早完成,这进一步证实了我对偏斜的猜测。

这是怎么回事?我怎样才能避免这种数据偏斜?

PS:该表以ORC格式存储

1 个答案:

答案 0 :(得分:1)

直接从磁盘读取时,我并不完全知道数据偏差的原因。但是,我发现repartition您的数据通常很有用,可以平衡分区的大小,避免被一个持久的任务阻止。我建议阅读https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch04.html的最后一部分("数据分区(高级)"部分),它提供了一些很好的提示:)