[英]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;
注意:
拆分文件較小然后默認值不是一個有效的解決方案。 在處理大型數據集時基本上使用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.tasks
和mapred.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
如何分配映射器
映射器的數量由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);
因此,如果您希望減少分割(減少映射器),則需要將此參數設置得更高。
此鏈接可用於了解更多信息。
此外,映射器和縮減器的數量始終取決於群集的可用映射器和縮減器插槽。
從默認值減小輸入分割大小。 映射器將會增加。
SET mapreduce.input.fileinputformat.split.maxsize;
拆分HBase表應該讓你的工作自動使用更多的映射器。
由於您有2個拆分,因此每個拆分由一個映射器讀取。 增加沒有。 分裂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.