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



我有以下配置单元查询:

select count(distinct id) as total from mytable;

自动生成:
1408映射器
1还原剂

我需要手动设置减速器的数量,我已经尝试了以下操作:

set mapred.reduce.tasks=50 
set hive.exec.reducers.max=50

但这些设置似乎都没有得到尊重。查询需要很长时间才能运行。有没有一种方法可以手动设置缩减器,或者重写查询,这样可以产生更多的缩减器?谢谢

在配置单元中这样写查询:

 SELECT COUNT(DISTINCT id) ....

总是导致只使用一个减速器。您应该:

  1. 使用该命令可以设置所需的减速器数量:

    设置mapredreduce.tasks=50

  2. 将查询重写如下:

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

这将导致2个地图+减少工作,而不是一个,但性能将大幅提高。

减速器的数量也取决于输入文件的大小

默认情况下,它是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>
    
  2. 或使用设置的

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

您可以在conf/mapred-site.xml配置文件中设置每个节点派生的减速器数量。请参见此处:http://hadoop.apache.org/common/docs/r0.20.0/cluster_setup.html.

特别是,您需要设置以下属性:

mapred.tasktracker.reduce.tasks.maximum

Mapper完全取决于文件的数量,即我们可以称之为输入拆分的文件的大小。拆分只是数据的逻辑拆分。例如:我的文件大小是150MB,我的HDFS默认块是128MB。它将创建两个拆分意味着两个块。将为此作业分配两个映射器。

Imp注意:假设我指定了拆分大小为50MB,那么它将启动3 Mapper,因为它完全取决于拆分的数量。

Imp注意:如果您期望10TB的输入数据,并且块大小为128MB,则最终会得到82000个映射。除非使用Configuration.set(MRJobConfig.NUM_maps,int)(它只为框架提供提示)将其设置得更高。

注意:如果我们没有指定分割大小,它将使用默认的hdfs块大小作为分割大小。

减速器有三个主要阶段:洗牌、排序和减速

命令:

1] 设置映射任务:-D mapred.Map.tasks=4
2] 设置减少任务:-D映射Reduce.tasks=2

相关内容

  • 没有找到相关文章

最新更新