我正在尝试使用CACHE TABLE tablename;将Hive表缓存到内存中。
执行此命令后,表被成功地缓存,但我注意到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。
即使我不缓存表格,只是从磁盘简单处理,我也看到一些任务比其他任务完成得快得多,这进一步证实了我对数据倾斜的猜测。
这里发生了什么?我如何避免数据倾斜?
附注:该表格以ORC格式存储。