簡體   English   中英

Hive無法手動設置減速器數量

[英]Hive unable to manually set number of reducers

我有以下配置單元查詢:

select count(distinct id) as total from mytable;

自動生成:
1408 Mappers
1減速機

我需要手動設置reducer的數量,我嘗試了以下內容:

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

但這些設置似乎都沒有得到尊重。 該查詢需要永遠運行。 有沒有辦法手動設置Reducer或重寫查詢,以便它可以導致更多的reducers? 謝謝!

在hive中編寫查詢,如下所示:

 SELECT COUNT(DISTINCT id) ....

總是會導致只使用一個減速機。 你應該:

  1. 使用此命令設置所需的Reducer數量:

    設置mapred.reduce.tasks = 50

  2. 重寫查詢如下:

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

這將導致2個map + reduce作業而不是1個,但性能提升將是巨大的。

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"

Mapper完全取決於文件的數量,即我們可以將其稱為輸入拆分的文件大小。 斯普利特注意到了數據的邏輯分裂。 例如:我的文件大小為150MB,我的HDFS默認塊為128MB。 它將創建兩個分割意味着兩個塊。 將為此作業分配兩個Mapper。

Imp注意:假設我已指定分割大小為50MB然后它將啟動3 Mapper,因為它完全取決於分割數量。

Imp注意:如果您期望10TB的輸入數據並且塊大小為128MB ,那么除非使用Configuration.set(MRJobConfig.NUM_MAPS,int)(僅提供框架提示),否則最終會有82,000個映射 。設置得更高。

注意:如果我們尚未指定拆分大小,則將默認hdfs塊大小作為拆分大小。

Reducer有3個主要階段: shuffle,sort和reduce

命令:

1]設置Map任務:-D mapred.map.tasks = 4
2]設置Reduce任務:-D mapred.reduce.tasks = 2

您可以在conf/mapred-site.xml配置文件中設置每個節點生成的reducers數。 見這里: http//hadoop.apache.org/common/docs/r0.20.0/cluster_setup.html

特別是,您需要設置此屬性:

mapred.tasktracker.reduce.tasks.maximum

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM