我试图使用内存缓存Hive Table CACHE TABLE tablename;
在此命令之后,表被成功缓存,但我注意到RDD在内存中分区的方式存在偏差。
这就是我在" Storage"中看到的内容。应用程序主机上的选项卡
Graphics#drawImage()
请注意,某些分区的范围为11MB到72MB,其他分区的范围是~1200MB
即使我没有缓存表格,只是简单地从磁盘处理,我发现有些任务比其他任务更早完成,这进一步证实了我对偏斜的猜测。
这是怎么回事?我怎样才能避免这种数据偏斜?
PS:该表以ORC格式存储
答案 0 :(得分:1)
直接从磁盘读取时,我并不完全知道数据偏差的原因。但是,我发现repartition
您的数据通常很有用,可以平衡分区的大小,避免被一个持久的任务阻止。我建议阅读https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch04.html的最后一部分("数据分区(高级)"部分),它提供了一些很好的提示:)