我有以下配置单元查询:
select count(distinct id) as total from mytable;
自动生成:
1408 映射器
1 reducer
我需要手动设置 reducer 的数量,我尝试了以下方法:
set mapred.reduce.tasks=50
set hive.exec.reducers.max=50
但这些设置似乎都没有得到遵守。查询需要永远运行。有没有办法手动设置 reducer 或者重写查询以便产生更多的 reducer?谢谢!
最佳答案
像这样在配置单元中编写查询:
SELECT COUNT(DISTINCT id) ....
将始终只使用一个 reducer 。 你应该:
使用此命令设置所需的 reducer 数量:
设置 mapred.reduce.tasks=50
重写查询如下:
SELECT COUNT(*) FROM ( SELECT DISTINCT id FROM ... ) t;
这将导致 2 个 map+reduce 作业而不是一个,但性能提升将是巨大的。
关于hadoop - Hive 无法手动设置 reducer 的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8762064/