当前位置: 主页 > 行业资讯 > 大数据培训 > HIVE SQL优化

HIVE SQL优化

2018-04-02 17:09:11 作者:光环大数据 栏目:未知

光环大数据作为国内知名的高端IT就业培训机构,多年来培养无数高薪人才!为了让更多人了解大数据、人工智能、数据分析、python等相关技能,光环大数据免费提供学习视频、2周免费跟班试听课程,如有需要,可点击留言

光环大数据的大数据培训班,只聘请精英讲师,确保教学的整体质量与教学水准,讲师团及时掌握时代潮流技术,将前沿技能融入教学中,确保学生所学知识顺应时代所需,通过深入浅出、通俗易懂的教学方式,指导学生更快的掌握技能知识,成就上万个高薪就业学子。
一、节制hive义务中的map数:
1. 平日环境下,功课会经由过程input的目次发生一个或许多个map义务。
主要的决议因素有: input的文件总个数,input的文件巨细,集群设置的文件块巨细(今朝为128M, 可在hive中经由过程set dfs.block.size;敕令查看到,该参数不克不及自定义改动);
2. 举例:
a) 假定input目次下有1个文件a,巨细为780M,那末hadoop会将该文件a分开成7个块(6个128m的块和1个12m的块),从而发生7个map数
b) 假定input目次下有3个文件a,b,c,巨细分别为10m,20m,130m,那末hadoop会分开成4个块(10m,20m,128m,2m),从而发生4个map数
即,假如文件大于块巨细(128m),那末会拆分,假如小于块巨细,则把该文件当做一个块。
3. 能否是map数越多越好?
谜底能否定的。假如一个义务有许多小文件(远远小于块巨细128m),则每一个小文件也会被当做一个块,用一个map义务来实现,
而一个map义务启动和初始化的光阴远远大于逻辑处置的光阴,就会形成很大的资本挥霍。
并且,同时可履行的map数是受限的。
4. 能否是包管每一个map处置靠近128m的文件块,就安枕无忧了?
谜底也是不一定。好比有一个127m的文件,失常会用一个map去实现,但这个文件只有一个或许两个小字段,却有几千万的记载,
假如map处置的逻辑比拟繁杂,用一个map义务去做,肯定也比拟耗时。
针对下面的成绩3和4,咱们必要采用两种方法来办理:即削减map数和增长map数;
若何归并小文件,削减map数?
假定一个SQL义务:
Select count(1) from popt_tbaccountcopy_mes where pt = ‘2012-07-04’;
该义务的inputdir /group/p_sdo_data/p_sdo_data_etl/pt/popt_tbaccountcopy_mes/pt=2012-07-04
共有194个文件,此中许多是远远小于128m的小文件,总巨细9G,失常履行会用194个map义务。
Map统共耗费的盘算资本: SLOTS_MILLIS_MAPS= 623,020
我经由过程如下方法来在map履行前归并小文件,削减map数:
set mapred.max.split.size=100000000;
set mapred.min.split.size.per.node=100000000;
set mapred.min.split.size.per.rack=100000000;
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
再履行下面的语句,用了74个map义务,map耗费的盘算资本:SLOTS_MILLIS_MAPS= 333,500
对付这个简略SQL义务,履行光阴上能够差不多,但节俭了一半的盘算资本。
也许说明一下,100000000表现100M, set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;这个参数表现履行前停止小文件归并,后面三个参数肯定归并文件块的巨细,大于文件块巨细128m的,依照128m来分开,小于128m,大于100m的,依照100m来分开,把那些小于100m的(包含小文件和分开大文件剩下的),停止归并,最毕生成为了74个块。
若何恰当的增长map数?
当input的文件都很大,义务逻辑繁杂,map履行异常慢的时刻,能够斟酌增长Map数,来使得每一个map处置的数据量削减,从而进步义务的履行效力。
假定有如许一个义务:
Select data_desc,
count(1),
count(distinct id),
sum(case when …),
sum(case when ...),
sum(…)
from a group by data_desc
假如表a只有一个文件,巨细为120M,但包含几千万的记载,假如用1个map去实现这个义务,肯定是比拟耗时的,这种环境下,咱们要斟酌将这一个文件正当的拆分红多个,
如许就能够用多个map义务去实现。
set mapred.reduce.tasks=10;
create table a_1 as
select * from a
distribute by rand(123);
如许会将a表的记载,随机的疏散到包含10个文件的a_1表中,再用a_1取代下面sql中的a表,则会用10个map义务去实现。
每一个map义务处置大于12M(几百万记载)的数据,效力肯定会好许多。
看上去,貌似这两种有些抵触,一个是要归并小文件,一个是要把大文件拆成小文件,这点恰是重点必要存眷的处所,依据实际环境,节制map数目必要遵守两个准则:使大数据量应用适合的map数;使单个map义务处置适合的数据量;
二、节制hive义务的reduce数:
1.Hive本身若何肯定reduce数:
reduce个数的设定极大影响义务履行效力,不指定reduce个数的环境下,Hive会预测肯定一个reduce个数,基于如下两个设定:
hive.exec.reducers.bytes.per.reducer(每一个reduce义务处置的数据量,默觉得1000^3=1G)
hive.exec.reducers.max(每一个义务最大的reduce数,默觉得999)
盘算reducer数的公式很简略N=min(参数2,总输入数据量/参数1)
即,假如reduce的输入(map的输入)总巨细不超过1G,那末只会有一个reduce义务;
如:select pt,count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04' group by pt;
           /group/p_sdo_data/p_sdo_data_etl/pt/popt_tbaccountcopy_mes/pt=2012-07-04 总巨细为9G多,是以这句有10个reduce
2.调剂reduce个数方法一:
调剂hive.exec.reducers.bytes.per.reducer参数的值;
set hive.exec.reducers.bytes.per.reducer=500000000; (500M)
select pt,count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04' group by pt; 此次有20个reduce
3.调剂reduce个数方法二;
set mapred.reduce.tasks = 15;
select pt,count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04' group by pt;此次有15个reduce
4.reduce个数并非越多越好;
同map同样,启动和初始化reduce也会耗费光阴和资本;
别的,有若干个reduce,就会有若干个输入文件,假如生成为了许多个小文件,那末假如这些小文件作为下一个义务的输入,则也会呈现小文件过多的成绩;
5.   甚么环境下只有一个reduce;
许多时刻你会发明义务中不论数据量多大,不论你有无设置调剂reduce个数的参数,义务中不停都只有一个reduce义务;
实在只有一个reduce义务的环境,除数据量小于hive.exec.reducers.bytes.per.reducer参数值的环境外,另有如下缘故原由:
a)   没有group by的汇总,好比把select pt,count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04' group by pt; 写成 select count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04';
这点异常常见,盼望人人只管即便改写。
b)   用了Order by
c)   有笛卡尔积
平日这些环境下,除找方法来变通和防止,我临时没有甚么好的方法,由于这些操纵都是全局的,以是hadoop不得不消一个reduce去实现;
同样的,在设置reduce个数的时刻也必要斟酌这两个准则:使大数据量应用适合的reduce数;使单个reduce义务处置适合的数据量;
想知道更多关于IT行业的信息吗?想远远不如行动,行动起来,一起加入光环大数据,一起进入IT行业,跟着光环大数据的脚步,一起走进如今的互联网信息时代,带给你不一样的色彩生活——【深圳大数据培训】


光环大数据作为国内知名的高端IT就业培训机构,多年来培养无数高薪人才!为了让更多人了解大数据、人工智能、数据分析、python等相关技能,光环大数据免费提供学习视频、2周免费跟班试听课程,如有需要,可点击留言
Tags标签 大数据培训

领取资料

X
立即免费领取

请准确填写您的信息

点击领取