【问题标题】:Hive unable to manually set number of reducersHive 无法手动设置减速器的数量
【发布时间】:2012-01-06 17:43:16
【问题描述】:

我有以下蜂巢查询:

select count(distinct id) as total from mytable;

自动生成:
1408 映射器
1个减速器

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

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

但这些设置似乎都没有得到尊重。查询需要永远运行。有没有办法手动设置减速器或重写查询,以便产生更多的减速器?谢谢!

【问题讨论】:

  • 你使用了多少个节点?
  • Tudor没关系,就算只有reducer槽,他也可以有更多的reducer。
  • 我怀疑这是真的,因为您有 1400 个映射器,但是您是否在本地模式下运行?如果是这样,我相信这会让你的减速器保持在 1。

标签: hadoop mapreduce hive


【解决方案1】:

像这样在 hive 中编写查询:

 SELECT COUNT(DISTINCT id) ....

总是会导致只使用一个reducer。 你应该:

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

    设置 mapred.reduce.tasks=50

  2. 重写查询如下:

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

这将导致 2 个 map+reduce 作业而不是 1 个,但性能提升将是可观的。

【讨论】:

  • 酷。为什么 Hive 编译器不自动进行这种优化(变成 2 个 MR 作业)?
  • 在某些情况下,将其转换为 2 个 MR 作业并不是一种优化。例如,如果 id 已经接近唯一并且表以列文件格式存储(如 RCFILE),那么 1 MR 作业肯定会更好。由于这样的情况并不奇怪,我想这就是为什么没有人将这种优化内置到 Hive 中的原因。
【解决方案2】:

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>
    
  2. 或使用集合

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

【讨论】:

    【解决方案3】:

    您可以在conf/mapred-site.xml 配置文件中设置每个节点生成的reducer 数量。见这里:http://hadoop.apache.org/common/docs/r0.20.0/cluster_setup.html

    特别需要设置这个属性:

    mapred.tasktracker.reduce.tasks.maximum
    

    【讨论】:

    • 适用于所有工作。如果要设置特定查询,我认为最好使用set mapred.reduce.tasks
    【解决方案4】:

    Mapper 完全取决于文件的数量,即文件的大小,我们可以将其称为输入拆分。拆分注意但数据的逻辑拆分。 例如:我的文件大小是 150MB,我的 HDFS 默认块是 128MB。它将创建两个拆分意味着两个块。将为这项工作分配两个 Mapper。

    提示:假设我已经指定分割大小为 50MB,那么它将启动 3 个 Mapper,因为它完全取决于分割的数量。

    提示:如果您期望 10TB 的输入数据并且块大小为 128MB,那么您最终会得到 82,000 个地图,除非使用 Configuration.set(MRJobConfig.NUM_MAPS, int)(仅向框架提供提示)将其设置得更高。

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

    Reducer 有 3 个主要阶段:shuffle、sort 和 reduce

    命令:

    1] 设置地图任务:-D mapred.map.tasks=4
    2]设置Reduce任务:-D mapred.reduce.tasks=2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 2015-05-01
      • 1970-01-01
      • 2020-08-28
      相关资源
      最近更新 更多