我试图确定hadoop (Hadoop2.0.0 mrv1)中是否有某些钩子可用于处理减速器的数据倾斜。场景:设置一个自定义复合键和分区器,以便将数据路由到还原器。为了处理奇怪的情况,但很可能是一百万个键和大值的情况,最终在同一个减速器上结束,需要某种启发,以便进一步划分这些数据以产生新的减速器。我在想一个两步的过程
有没有更好的办法[另一种方法]?
可能的反解决办法可能是编写映射器的输出,并从另一个地图工作中完成减速器的工作,但不想对namenode施加压力。
发布于 2015-09-17 18:49:18
这个想法突然出现在我的脑海中,我不知道它有多好。
假设您正在使用10个映射程序运行作业,但由于数据偏斜而失败。这个想法是,您将还原器的数量设置为15,并定义每个映射器中的最大减速器(键、值)应该转到哪个减速机。您可以将该信息保存在自定义分区程序类中的散列图中。一旦一个特定的减速机达到极限,您就开始发送下一组(键,值)对到另一个减速器,从额外的5减速机,这是我们为处理偏度而保留的。
发布于 2015-09-17 19:47:38
如果进程允许,使用Combiner (减缩类型函数)可以帮助您。如果您在Mapper端预先聚合数据。然后,即使您的所有数据都以相同的减缩器结束--数据量可能是可管理的。
另一种方法是重新实现分区器,以避免出现倾斜的情况。
https://stackoverflow.com/questions/32627836
复制相似问题