Hive查询停留在99%

use*_*589 5 sql hadoop hive mapreduce hiveql

我在Hive中使用左连接插入记录。当我设置限制1时,查询有效,但对于所有记录,查询卡住了99%的减少工作。

下面的查询作品

   Insert overwrite table tablename select a.id , b.name from a left join b on a.id = b.id limit 1; 
Run Code Online (Sandbox Code Playgroud)

但这不是

    Insert overwrite table tablename select table1.id , table2.name from table1 left join table2 on table1.id = table2.id;
Run Code Online (Sandbox Code Playgroud)

我增加了减速器的数量,但仍然无法正常工作。

Bus*_*ero 5

以下是一些 Hive 优化,它们可能有助于查询优化器并减少通过线路发送的数据的开销。

set hive.exec.parallel=true;
set mapred.compress.map.output=true;
set mapred.output.compress=true;
set hive.exec.compress.output=true;
set hive.exec.parallel=true;
set hive.cbo.enable=true;
set hive.compute.query.using.stats=true;
set hive.stats.fetch.column.stats=true;
set hive.stats.fetch.partition.stats=true;
Run Code Online (Sandbox Code Playgroud)

但是,我认为潜在问题是连接中的关键的可能性更大。有关偏斜和可能的解决方法的完整描述,请参阅此https://cwiki.apache.org/confluence/display/Hive/Skewed+Join+Optimization

您还提到 table1 比 table2 小得多。您可以根据硬件限制尝试地图端连接。( https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins )


Syn*_*tax 3

如果您的查询卡在 99%,请检查以下选项 -

  • 数据倾斜,如果您有倾斜的数据,则可能有 1 个减速器正在完成所有工作
  • 两侧重复键 - 如果两侧都有许多重复的联接键,您的输出可能会爆炸并且查询可能会卡住
  • 你的一个表很小,尝试使用映射连接,或者如果可能的话,SMB连接,这比减少侧连接有巨大的性能提升
  • 转到资源管理器日志并查看作业正在访问和写入的数据量。