Spark和Hive处理数据倾斜的两种解决方案

比如处理80TB的数据,partition数量为15000,理论上平均每个节点是5-6G的数据,但是实际上根据key-value在存储时,很有可能因为某个key的数量特别多,导致数据倾斜。这样就会出现超过物理内存限制的报错。偶尔重试可能会通过,但是会比较不稳定;

目前我们这边的两种解决办法是:

1. 如果倾斜的key数量比较少,那么过滤出来,对其进行单独处理;
2. 如果倾斜的key数量比较多,那么将key值 map成 key_01到key_100,join的另一边map成key_1~100的随机数,那么这样join之后,原本同样的key值会落到同一个partition,现在变成随机落到了100个节点上,使得数据分布更加平均。

你可能感兴趣的:(Spark,Hive)