您当前的位置:首页 >> 家居百科

大数据培训班Hive如何控制map个数与性能调优参数

2023-02-24 12:16:10

00000_0.deflate

14.3 M hdfs://suninghadoop2/user/finance/hive/warehouse/fdm_tmp.db/t_fgeics_company_liquidation_d_tmp/000001_0.deflate

2.2 两个注记来进自为相似性,其之中小注记在当年,大注记在后

2.2.1 如下,列车运自为如下预定义,构建两个注记来进自为相似性。

set mapred.max.split.size=134217728;

set mapred.min.split.size=134217728;

drop table IF EXISTS fdm_tmp.company_liquidation_fgeics_company_ar_d_tmp;

create table fdm_tmp.company_liquidation_fgeics_company_ar_d_tmp

as

select

a.id

,a.entid

,a.ancheyear

,b.liqmen

,b.ligprincipal

,a.regno

,a.tel

,a.postalcode

,a.dom

,a.email

,a.busst

,a.empnum

,a.name

,a.updated

,b.etl_time

from fdm_tmp.t_fgeics_company_liquidation_d_tmp b

right join fdm_tmp.company_liquidation_fgeics_company_ar_d a

on b.entid = a.entid;

Hadoop job information for Stage-1: number of mappers: 24; number of reducers: 17

结果种系统性:hive重新启动了24个map算子,17个reduce算子。在hadoop之中,一般绑定的split薄片小于等同于blocksize(128Mb),如果是小机密文件的话(未有来进自为小机密文件的更名)则每个小机密文件重新启动一个map算子。而仅仅在hive之中,并不是split的形状要小于等同于blocksize,而是可以远相等blocksize。比如这里,4.4G机密文件注记,按128Mb薄片算的话,据估计仅仅能够35个map,而仅仅不用够24个,千分之每个map处理事件了187Mb的机密文件。这是为什么呢?此外这里明明设为了set mapred.max.split.size=134217728,每个map仅次于split块是 128Mb,而仅仅为什么模板无法用呢?留言板有很多关于这方面的文章,但是几乎都是转载捏造,无法任何了解理解,或者了解概述同意map取值的原因。

3 案例演示同意map取值的各种因素

说是同意map取值的各种因素有很多,比如机密文件应该缓冲器,缓冲器的后的机密文件应该拥护复音,比如机密文件绑定的inputfort格式,完全相同构建类的split演算法也完全相同,那么map的取值调优手段也完全相同,【高度重视尚IBM一些公司,总能兼修IT】下面按分类法详实却概述hive之中同意map取值的各种因素与常见map调优的常用。

首先分类法:处理事件的机密文件应该缓冲器,且JPEG应该拥护机密文件的复音

如下我们一些公司,对于hive关于缓冲器的配有,常用了缓冲器,且常用的是绑定的JPEG是deflate步骤。

hive> set io.compression.codecs; ;还有配有了哪些JPEG

io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.BZip2Codec

hive> set hive.exec.compress.output;

hive.exec.compress.output=true ;还有应该带进缓冲器

hive> set mapreduce.output.fileoutputformat.compress.codec; ;还有常用的JPEG

mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.DefaultCodec

我们知道hive之中有些JPEG是不拥护机密文件复音的,如下我们常用的绑定的deflate演算法,就不拥护机密文件复音。

3.1 机密文件常用了缓冲器,且JPEG不拥护机密文件复音

;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有常用完全相同模板执自为里面预定义转化成的map取值;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有-

;还有1.常用种系统配有的绑定值

set mapred.max.split.size = 256000000; ;还有

set mapred.min.split.size = 256000000;

Hadoop job information for Stage-1: number of mappers: 24; number of reducers: 17

;还有2.降低种系统绑定值

set mapred.max.split.size=134217728;

set mapred.min.split.size=134217728;

Hadoop job information for Stage-1: number of mappers: 24; number of reducers: 17

;还有3.下调种系统绑定值

set mapred.max.split.size=500000000;

set mapred.min.split.size=256000000;

Hadoop job information for Stage-1: number of mappers: 9; number of reducers: 17

;还有4.下调种系统绑定值

set mapred.max.split.size=1024000000;

set mapred.min.split.size=1024000000;

Hadoop job information for Stage-1: number of mappers:6 ; number of reducers: 17

如上我们常用完全相同的模板配有,来列车运自为里面同一段预定义,看种系统转化成的map取值,慎重的才才会断定,当我们常用绑定值是转化成了24个map,千分之每个map处理事件了187Mb机密文件,但当我们下调

set mapred.max.split.size=134217728时(每个map最多处理事件128Mb),相应的map取值并无法提高,这是为什么呢?

关于这个关键问题就要却说到同意map取值的首要各种因素:机密文件应该重新启动缓冲器,且JPEG应该拥护机密文件复音了。因为这里机密文件传输常用绑定的deflate演算法,不拥护机密文件复音,所以设为的模板split.size=134217728无法生效。因为每个map处理事件的splitsize仅仅上要相等等同于每个机密文件传输的形状。这里每个机密文件传输的形状200Mb约,所以每个map处理事件的极小重量要相等200Mb。

而当我们将set mapred.max.split.size=102400000设为的较大时,为什么又可以压制map取值了呢?因为deflateJPEG虽然不拥护机密文件复音,但是可以来进自为机密文件更名哇。从hive0.5开始就绑定map当年来进自为小机密文件更名了。如下,我们一些公司常用的也是绑定的带进map当年机密文件更名。但是警惕即使这里拥护机密文件更名,也是基于机密文件块的整个机密文件块更名,而不是基于blocksize的block更名。

hive> set hive.input.format; ;还有hive0.5开始的绑定值,这个值才会影响map取值的压制

hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

大声提示1:

通过里面种系统性归纳,当hive能够处理事件的机密文件是缓冲器,且JPEG不拥护机密文件复音的时候,同意map取值的各种因素主要是机密文件块仅仅传输的形状,如果机密文件块本身较大,比如500Mb约,那么每个map处理事件的splitsize据估计要是500Mb约。这个时候我们不能人为通过模板降低每个map的splitsize来提高map取值,不用通过提高splitsize,降低map取值。

但是一般经验来却说,每个map处理事件的splitsize最好是128Mb(等同于blocksize),这样高效率最高者。所以这个时候如果我们想要提高map取值,不用通过临时注记或者insert ...select的表达手段,通过模板配有将机密文件块重新传输成很小的机密文件块,然后再自为来进自为处理事件。反之,如果机密文件块本身极小,那么我们可以通过提高splitsize来降低map,进而调优提高程序在的列车运自为高效率。

大声归纳1:

如果hive处理事件的机密文件是缓冲器来来进自为,且缓冲器来来进自为不拥护机密文件复音,那么这个时候我们不用通过压制模板来降低map取值,而不能通过配有模板来提高map取值,所以Hive对于缓冲器不宜复音机密文件的调优有限。可以首先通过hadoop fs -du -s -h命令查询机密文件的传输形状结果,然后根据仅仅来进自为调优。常用的配有模板如下:

set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; ;还有hive0.5开始就是绑定值,执自为map当年来进自为小机密文件更名

;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有

set mapred.max.split.size=256000000

set mapred.min.split.size=10000000

set mapred.min.split.size.per.node=8000000 ;还有每个节点处理事件的极小split

set mapred.min.split.size.per.rack=8000000 ;还有每个收纳处理事件的极小slit.

;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有

1.警惕一般来却说这四个模板的配有结果形状要保证如下彼此间。

max.split.size>= min.split.size>= min.size.per.node>= min.size.per.node

2.这四个模板的起到XFS分别如下

max.split.size

比如如下,正因如此里面的预定义,我们将其模板设为如下,断定只重新启动了12个map,故max.split.size无法起起到。

当四个模板设为对立时,种系统才会自动以XFS最高者的模板略有不同,来进自为近似值

set mapred.max.split.size=300000000;

set mapred.min.split.size.per.node=300000000;

set mapred.min.split.size.per.rack=300000000;

Hadoop job information for Stage-1: number of mappers: 12; number of reducers: 17

3.警惕这四个模板可以依赖性设为,可以依赖性设为形状或者常用绑定值,但仍遵循当年两条规章。

3.2 机密文件未有常用缓冲器,或JPEG拥护机密文件复音

正因如此是里面那个4.4g机密文件,我们这个时候让其为非缓冲器来来进自为,断定这个时候机密文件总形状为23.4G,传输为22个机密文件,千分之每个机密文件形状都在1.1G约。所以缓冲器比如说是个好东西。如下我们所有非缓冲器的性能指标测试基于此机密文件。

[finance]$ hadoop fs -count hdfs://suninghadoop2/user/finance/hive/warehouse/fdm_tmp.db/company_liquidation_fgeics_company_ar_d

1 22 25154158871 hdfs://suninghadoop2/user/finance/hive/warehouse/fdm_tmp.db/company_liquidation_fgeics_company_ar_d

;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有-

[finance]$ hadoop fs -du -s -h hdfs://suninghadoop2/user/finance/hive/warehouse/fdm_tmp.db/company_liquidation_fgeics_company_ar_d

23.4 G hdfs://suninghadoop2/user/finance/hive/warehouse/fdm_tmp.db/company_liquidation_fgeics_company_ar_d

;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有-

[finance]$ hadoop fs -du -h hdfs://suninghadoop2/user/finance/hive/warehouse/fdm_tmp.db/company_liquidation_fgeics_company_ar_d

1.1 G hdfs://suninghadoop2/user/finance/hive/warehouse/fdm_tmp.db/company_liquidation_fgeics_company_ar_d/000000_0

1.1 G hdfs://suninghadoop2/user/finance/hive/warehouse/fdm_tmp.db/company_liquidation_fgeics_company_ar_d/000001_0

3.2.1.若这时set hive.input.format为HiveInputFormat

hive> set hive.input.format; ;还有从hive0.5就绑定是CombineHiveInputFormat,所以这个用的不多

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

如果这时set hive.input.format为HiveInputFormat,这个时候有以下三个注记征值来确切InputSplit的取值:

set mapred.map.tasks=2 ;还有我们一些公司常用的是绑定2

set mapred.max.split.size=256000000 ;还有我们一些公司绑定值

set mapred.min.split.size=10000000 ;还有-我们一些公司绑定值

set dfs.block.size=134217728 ;还有128Mb

;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有

1. goalSize:该值由 totalSize/numSplits totlasize机密文件块形状,numslplits=mapred.map.tasks=2

2. minSize:由配有模板 mapred.min.split.size(或者Vista的mapreduce.input.fileinputformat.split.minsize)mapred.min.split.size=10000000

同意的 InputFormat的极小宽度,绑定为1,我们一些公司绑定值是

3.blockSize:HDFS 之中的机密文件传输块block的形状,绑定为128MB。

这三个模板同意一个 InputFormat 移位的终究的宽度,近似值步骤如下:

splitSize = max{minSize,min{goalSize,blockSize}}

大声归纳2:

当hive处理事件的机密文件是非缓冲器或者缓冲器可复音,且hive.input.format为HiveInputFormat时,这个时候同意map取值的模板主要是splitSize = max{minSize,min{goalSize,blockSize}} ,只有这个时候一般map的splitsize小于等同于blocksize(128Mb)。但说是这种手段现在的企业仅仅合作开发之中已经常用的非常少了。

3.2.2.若hive.input.format为绑定CombineHiveInputFormat

1.如下,常用一些公司绑定的map算子split模板,断定未有缓冲器的23.4g的机密文件(22个)这里合计常用了112个map算子,适用模板的设为结果set mapred.max.split.size=256000000 ; 23.4*1024/112=187Mb

;还有常用绑定配有模板,构建对非缓冲器机密文件的操作

set mapred.max.split.size=256000000 ;

set mapred.min.split.size=10000000;

drop table IF EXISTS fdm_tmp.company_liquidation_fgeics_company_ar_d_tmp;

create table fdm_tmp.company_liquidation_fgeics_company_ar_d_tmp

as

select

a.id

,a.entid

,a.ancheyear

,b.liqmen

,b.ligprincipal

,a.regno

,a.tel

,a.postalcode

,a.dom

,a.email

,a.busst

,a.empnum

,a.name

,a.updated

,b.etl_time

from fdm_tmp.t_fgeics_company_liquidation_d_tmp b

right join fdm_tmp.company_liquidation_fgeics_company_ar_d a

on b.entid = a.entid;

Hadoop job information for Stage-1: number of mappers: 112; number of reducers: 85

Time taken: 152.679 seconds

2.如下,将里面绑定的模板互换调小,列车运自为正因如此里面的预定义,看map天内应该有提高?很也许,我们通过设为max.split.size的值构建了提高map取值的功能。这里map的取值由122取值变成了199个,千分之每个map处理事件天内据120Mb约。但是列车运自为时长却变慢了很多,时长由153s变成了243s。所以map的split形状并不是要接近blocksize才高效,这主要跟战略性的性能指标配有有关。

;还有将map的split模板仅次于值设为为128Mb.

set mapred.max.split.size=134217728 ;

set mapred.min.split.size=10000000;

Hadoop job information for Stage-1: number of mappers: 199; number of reducers: 85

Time taken: 243.038 seconds

3.如下,将里面的绑定模板提高,列车运自为正因如此的预定义,结果虽然我们将maxsplitsize设为的值得警惕大,但是互换map的取值并无法互换的逐次降低,如果按仅次于值算应该在20多个map,而仅仅不是这样。这却概述,和光设为仅次于值是无法用的,这只是一个平均值,还有互换的设为极小值。

;还有只将max.split.size设为的值得警惕大,min.split.size还是10Mb约。

set mapred.max.split.size=1024000000;

set mapred.min.split.size= 10000000;

Hadoop job information for Stage-1: number of mappers: 106; number of reducers: 85

4.map的多个模板适切常用,可靠压制map的取值

;还有1.只将max.split.size设为的值得警惕大,且将 min.split.size常用绑定值,断定map取值无法逐次降低。

set mapred.max.split.size=1024000000;

set mapred.min.split.size=10000000;

Hadoop job information for Stage-1: number of mappers: 106; number of reducers: 85

;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有

;还有2.同时将max.split.size设为的值得警惕大,且将 min.split.size同时设为较大为256Mb约

但是断定map的取值并无法降低,还是和里面一样,这却概述压制map的取值还有别的各种因素

set mapred.max.split.size=1024000000;

set mapred.min.split.size=256000000;

Hadoop job information for Stage-1: number of mappers: 106; number of reducers: 85

;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有

;还有-3.适切min.split.size.per.node常用,断定map取值一直无法降低

set mapred.max.split.size=1024000000;

set mapred.min.split.size= 256000000;

set mapred.min.split.size.per.node=256000000;;还有绑定值是800000

set mapred.min.split.size.per.rack=800000;;还有-绑定值

;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有

;还有-4.适切min.split.size.per.rack常用,map取值精准降低了,每个map处理事件的天内据在256和1024中间

Hadoop job information for Stage-1: number of mappers: 106; number of reducers: 85

set mapred.max.split.size=1024000000;

set mapred.min.split.size= 256000000;

set mapred.min.split.size.per.node=256000000;

set mapred.min.split.size.per.rack=256000000;

Hadoop job information for Stage-1: number of mappers: 88; number of reducers: 85

大声归纳3:

如果Hive处理事件的的机密文件为非缓冲器格式或者缓冲器可复音,且inputFormat为CombineHiveInputFormat时,则压制map取值是由以下四个模板起起到,关于这四个模板起到XFS与常用警惕事项代为概要如下。

mapred.min.split.size 或者 mapreduce.input.fileinputformat.split.minsize。

mapred.max.split.size 或者 mapreduce.input.fileinputformat.split.maxsize。

mapred.min.split.size.per.rack 或者 mapreduce.input.fileinputformat.split.minsize.per.rack。

mapred.min.split.size.per.node 或者 mapreduce.input.fileinputformat.split.minsize.per.node。

set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; ;还有hive0.5开始就是绑定值,执自为map当年来进自为小机密文件更名

;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有

set mapred.max.split.size=256000000 ;还有一些公司战略性绑定值

set mapred.min.split.size=10000000 ;还有一些公司战略性绑定值

set mapred.min.split.size.per.node=8000000 ;还有每个节点处理事件的极小split

set mapred.min.split.size.per.rack=8000000 ;还有每个收纳处理事件的极小slit.

;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有;还有

1.警惕一般来却说这四个模板的配有结果形状要保证如下彼此间。

max.split.size>= min.split.size>= min.size.per.node>= min.size.per.node

2.这四个模板的起到XFS分别如下

max.split.size

比如如下,正因如此里面的预定义,我们将其模板设为如下,断定只重新启动了12个map,故max.split.size无法起起到。

当四个模板设为对立时,种系统才会自动以XFS最高者的模板略有不同,来进自为近似值

set mapred.max.split.size=300000000;

set mapred.min.split.size.per.node=300000000;

set mapred.min.split.size.per.rack=300000000;

Hadoop job information for Stage-1: number of mappers: 12; number of reducers: 17

3.警惕这四个模板可以依赖性设为,可以依赖性设为形状或者常用绑定值,但仍遵循当年两条规章。

所以如果对于Hive调优,想要通过压制map取值来进自为调优,首先确切战略性应该重新启动了缓冲器,www.atguigu.com 且缓冲器的演算法应该直接机密文件复音,然后再自为确切战略性配有的绑定的hive.input.format是什么构建类,完全相同构建类对于split的演算法完全相同,当然压制map的模板也完全相同。所以对于压制map取值调优不算不是留言板很多人却说的那么单纯。

推荐阅读:

大天内据合作开发之天内据仓库Hive

大天内据合作开发之Hive SQL外设算子

大天内据合作开发之离线种系统性工具Hive

大天内据合作开发之Hive调优技巧

杭州妇科专科医院哪里好
辽宁白癜风检查
成都风湿治疗方法
漳州看妇科到哪个医院好
贵州生殖感染医院哪好
相关阅读
友情链接