reducer在运行hive-join查询时停止了66.68%的工作

fiei3ece  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(351)

尝试连接6个表,每个表中大约有500万行。正在尝试联接所有表上按升序排序的帐号。map任务成功完成,减速机停止工作率为66.68%。尝试了增加减速器数量等选项,还尝试了设置hive.auto.convert.join=true的其他选项;设置hive.hashtable.max.memory.usage=0.9;并设置hive.smalltable.filesize=25000000l;但结果是一样的。尝试使用少量记录(如5000行),查询效果非常好。
请建议在这里可以做些什么使它工作。

nfs0ujit

nfs0ujit1#

对于现在和将来的调试,您可以使用jobtracker来查找和检查有问题的reducer的日志。然后您可以使用reduce操作来更好地处理所发生的事情。小心别用日志把它炸了!例如,尝试查看reduce操作输入的记录数。

k97glaaz

k97glaaz2#

66%的还原者开始执行实际的还原(0-33%是无序,33-66%是排序)。在与hive的连接中,reducer在两个数据集之间执行笛卡尔乘积。
我想至少有一个外键经常出现在所有的数据集中。注意空值和默认值。
例如,在连接中,假设键“”在六个表中的每一个表中出现十次(10^6)。那一键有一百万条输出记录。如果“”在一个表中出现1000次,在另一个表中出现1000次,在另一个表中出现1000次,然后在其他三个表中出现两次,则得到80亿条记录(1000^3*2^3)。你可以看到这是怎么失控的。我猜至少有一个键会产生大量的输出记录。
这也是在hive之外的rdbms中要避免的一般良好实践。在多对多关系之间进行多个内部连接会给你带来很多麻烦。

相关问题