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)
我增加了减速器的数量,但仍然无法正常工作。
以下是一些 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 )
如果您的查询卡在 99%,请检查以下选项 -