Hive无法手动设置减速器数量

mag*_*alo 25 hadoop hive mapreduce

我有以下配置单元查询:

select count(distinct id) as total from mytable;
Run Code Online (Sandbox Code Playgroud)

自动生成:
1408 Mappers
1 Reducer

我需要手动设置reducer的数量,我尝试了以下内容:

set mapred.reduce.tasks=50 
set hive.exec.reducers.max=50
Run Code Online (Sandbox Code Playgroud)

但这些设置似乎都没有得到尊重.该查询需要永远运行.有没有办法手动设置Reducer或重写查询,以便它可以导致更多的reducers?谢谢!

wlk*_*wlk 43

在hive中编写查询,如下所示:

 SELECT COUNT(DISTINCT id) ....
Run Code Online (Sandbox Code Playgroud)

总是会导致只使用一个减速机.你应该:

  1. 使用此命令设置所需的Reducer数量:

    设置mapred.reduce.tasks = 50

  2. 重写查询如下:

SELECT COUNT(*)FROM(SELECT DISTINCT id FROM ...)t;

这将导致2个map + reduce作业而不是1个,但性能提升将是巨大的.


use*_*742 10

Reducer的数量还取决于输入文件的大小

默认情况下,它是1GB(1000000000字节).您可以通过设置属性hive.exec.reducers.bytes.per.reducer来更改它:

  1. 要么通过改变hive-site.xml

    <property>
       <name>hive.exec.reducers.bytes.per.reducer</name>
       <value>1000000</value>
    </property>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或使用集合

    $ hive -e "set hive.exec.reducers.bytes.per.reducer=1000000"