Join 在运行配置单元联接查询时,还原程序以66.68%的速度停止工作

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

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


请建议在这里可以做些什么来让它工作。

66%的还原者开始执行实际的还原(0-33%是洗牌,33-66%是排序)。在与配置单元的联接中,减速器在两个数据集之间执行笛卡尔乘积

我想至少有一个外键经常出现在所有数据集中。注意空值和默认值

例如,在联接中,假设键“abc”在六个表(10^6)中的每个表中出现十次。这是一个键的一百万个输出记录。如果“abc”在一个表中出现1000次,在另一个表中出现1000次,在另一个表中出现1000次,然后在其他三个表中出现两次,则会得到80亿条记录(1000^3*2^3)。你可以看到这是如何失控的。我猜至少有一个键会产生大量的输出记录


这也是在Hive之外的RDBMS中避免的一般良好实践。在多对多关系之间执行多个内部联接可能会给您带来很多麻烦。

为了现在和将来对此进行调试,您可以使用JobTracker查找并检查相关减速器的日志。然后,您可以使用reduce操作来更好地处理正在发生的事情。当心别用日志记录把它炸了当然了!
例如,尝试查看输入到reduce操作的记录数。

您是否有任何帐户号码在表中的记录数不成比例。表是否在联接之前排序?这样您就可以利用映射端联接了吗。其中一个表是否比其他表大得多(连接中最后列出的是那个大表吗?)感谢大家的快速响应。无论如何,是否只知道连接发生在地图一侧?从日志或任何其他方式?我们将联接分为两个单独的联接(联接前3个表和后3个表),输出在第3个联接中联接。它完美地工作了!!!对于映射端连接:作业日志通常会显示它是否自动执行此操作。我认为它需要较小的数据集(几千条记录),因为它将通过分布式缓存将数据分发给任务。