簡體   English   中英

增加Hadoop 2中的Hive映射器數量

[英]Increase number of Hive mappers in Hadoop 2

我從Hive創建了一個HBase表,我正在嘗試對它進行簡單的聚合。 這是我的Hive查詢:

from my_hbase_table 
select col1, count(1) 
group by col1;

地圖減少作業只產生2個映射器,我想增加它。 使用普通地圖縮小作業,我將配置紗線和映射器內存以增加映射器的數量。 我在Hive中嘗試了以下操作,但它不起作用:

set yarn.nodemanager.resource.cpu-vcores=16;
set yarn.nodemanager.resource.memory-mb=32768;
set mapreduce.map.cpu.vcores=1;
set mapreduce.map.memory.mb=2048;

注意:

  • 我的測試集群只有2個節點
  • HBase表有超過5M的記錄
  • Hive日志顯示HiveInputFormat和一些splits = 2

拆分文件較小然后默認值不是一個有效的解決方案。 在處理大型數據集時基本上使用Spiting。 默認值本身是一個小尺寸,因此不值得再次拆分它。

我建議您在查詢之前進行以下配置。您可以根據輸入數據應用它。

set hive.merge.mapfiles=false;

set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;

set mapred.map.tasks = XX;

如果您還想指定減速機的數量,那么您可以使用以下配置

set mapred.reduce.tasks = XX;

請注意,在Hadoop 2(YARN)上,不推薦使用mapred.map.tasksmapred.reduce.tasks ,並將其替換為其他變量:

mapred.map.tasks     -->    mapreduce.job.maps
mapred.reduce.tasks  -->    mapreduce.job.reduces

請參考以下與此相關的有用鏈接

http://answers.mapr.com/questions/5336/limit-mappers-and-reducers-for-specific-job.html

無法增加Hive Mapper任務?

如何分配映射器

映射器的數量由MapReduce作業中使用的InputFormat確定的拆分數決定。 在典型的InputFormat中,它與文件數和文件大小成正比。

假設您的HDFS塊配置配置為64MB(默認大小),並且您有一個100MB大小的文件,那么它將占用2個塊,然后將根據塊分配2個映射器

但是假設你有2個大小為30MB的文件(每個文件),那么每個文件將占用一個塊,映射器將基於此獲得分配。

當您使用大量小文件時,Hive默認使用CombineHiveInputFormat。 就MapReduce而言,它最終轉換為使用CombineFileInputFormat,它在多個文件上創建虛擬分割,盡可能按公共節點,機架分組。 組合拆分的大小由確定

mapred.max.split.size
or 
mapreduce.input.fileinputformat.split.maxsize ( in yarn/MR2);

因此,如果您希望減少分割(減少映射器),則需要將此參數設置得更高。

此鏈接可用於了解更多信息。

每個Hadoop映射器將讀取的默認大小是多少?

此外,映射器和縮減器的數量始終取決於群集的可用映射器和縮減器插槽。

從默認值減小輸入分割大小。 映射器將會增加。

SET mapreduce.input.fileinputformat.split.maxsize;

拆分HBase表應該讓你的工作自動使用更多的映射器。

由於您有2個拆分,因此每個拆分由一個映射器讀取。 增加沒有。 分裂。

暫無
暫無

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

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