我正在使用用python编写的自定义map / reduce脚本来对hive表进行聚合(或者hive查询的结果)。我遇到的问题是,当聚合键具有偏斜值时,一个缩减器最终占所有行的15%,并且比所有其他行长3-4倍。
为了解决这个问题,我编写了一个合并器脚本。这通过hadoop流调用并且正如我所期望的那样运行时工作正常,但是我无法弄清楚如何在蜂巢中使用这个组合器。这是我到目前为止所尝试的(在HQL的地图阶段)
使用'python mapper.py |排序| python combiner.py'
这似乎什么都不做 - 测试我用'head -n 1'替换了最后一个命令,它仍然返回相同数量的行 - 看起来它只是运行mapper.py并忽略管道后的所有内容。
我还尝试了各种嵌套命令的方法,因此使用FROM(... MAP..USING)查询并将其作为输入放入另一个MAP / REDUCE USING查询中。这会产生两个你想象的阶段,但是第一阶段产生减速器(我不会期望),它使用的减速器与阶段2定义的减速器相同。
我尝试了上面的查询,但在子查询中添加了一个使用'cat'的REDUCE,它似乎根本没有改变行为。
您可以给我任何帮助,我们将不胜感激。我更喜欢使用hive而不是hadoop流,因为这个进程的输入(在某些情况下)是一个hive视图,输出也被写入一个表并动态分区 - 我将不得不编写单独的步骤来处理输入/ hadoop流的输出。
除了合并器,有没有人有充分的理由为什么我放入USING'python mapper.py | head -n 1'它没有按预期返回每个mapper一行?如果我可以使用管道输出工作,我可能会镜像组合器逻辑。