自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

大多數(shù)開(kāi)發(fā)人員都弄錯(cuò)的Hive與MapReduce小文件合并問(wèn)題

大數(shù)據(jù) 數(shù)據(jù)分析
因?yàn)樵O(shè)置上面四個(gè)參數(shù),看上去規(guī)定了map結(jié)束,MR結(jié)束合并文件,如果文件平均小于smallfiles.avgsize啟動(dòng)一個(gè)新的MRj進(jìn)行文件的二次合并。如果啟動(dòng)mr合并文件,沒(méi)有問(wèn)題。

0.背景

近來(lái)我們公司搞小文件治理(小于10Mb),小文件太多的危害就不此贅述了。公司的開(kāi)發(fā)人員提供的合并小文件治理配置如下:

-- 設(shè)置小文件合并
set hive.merge.mapfiles=true;
set hive.merge.mapredfiles=true;
set hive.merge.size.per.task = 256000000 ;
set hive.merge.smallfiles.avgsize= 256000000 ;


看上去配置的沒(méi)啥問(wèn)題,不管是Map-only,還是MapReduce都考慮到了,只要輸出的文件小于這個(gè)值,就重新啟動(dòng)一個(gè)MR去執(zhí)行文件合并??匆卜螲ive官網(wǎng)的配置解釋


然而現(xiàn)實(shí)并非如此,廢話不多說(shuō),you can you code,no can no bb.

原分析表數(shù)據(jù)在HDFS存儲(chǔ)為551個(gè)小文件,下面所有的測(cè)試都是基于這個(gè)文件。

1.測(cè)試代碼方案1

設(shè)置啟動(dòng)map前文件合并,先使用官方默認(rèn)配置,實(shí)現(xiàn)文件合并測(cè)試

set  hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; --官方默認(rèn)值,也是當(dāng)前平臺(tái)默認(rèn)值
set hive.merge.smallfiles.avgsize=16000000; --官方默認(rèn)值,也是當(dāng)前平臺(tái)默認(rèn)值
set hive.merge.size.per.task=256000000; --官方默認(rèn)值,也是當(dāng)前平臺(tái)默認(rèn)值
set hive.merge.mapfiles =true ; --官方默認(rèn)值,也是當(dāng)前平臺(tái)默認(rèn)值
set hive.merge.mapredfiles = true ; --官方默認(rèn)值,也是當(dāng)前平臺(tái)默認(rèn)值

drop table if exists FDM_SOR.T_FSA_BHVR_NEW_EXPO_D_tmp_tmp;
create table FDM_SOR.t_fsa_bhvr_new_expo_d_tmp_tmp
stored as orc
as
select
*
from FDM_SOR.t_fsa_bhvr_new_expo_d
where stat_date = '20200630'


結(jié)果:只產(chǎn)生了438個(gè)文件,看樣子效果不錯(cuò),文件變少了,但是發(fā)現(xiàn)還是有很多小于16Mb的文件,為啥設(shè)置了不管用呢,是不是set
hive.merge.smallfiles.avgsize官方的默認(rèn)值給的太小了。需要加大??磳?shí)驗(yàn)2.



2.測(cè)試代碼方案2

設(shè)置啟動(dòng)map前文件合并,將set
hive.merge.smallfiles.avgsize值加大,增加文件合并的Size。按照官方的說(shuō)法當(dāng)輸出的文件平均小于16Mb時(shí)系統(tǒng)會(huì)再啟動(dòng)一個(gè)MR進(jìn)行文件合并。這下該管用了吧,請(qǐng)看:

set  hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; --官方默認(rèn)值,也是當(dāng)前平臺(tái)默認(rèn)值
set hive.merge.smallfiles.avgsize=256000000; --改了這個(gè)值,由默認(rèn)的16Mb,改成256Mb
set hive.merge.size.per.task=256000000; --官方默認(rèn)值,也是當(dāng)前平臺(tái)默認(rèn)值
set hive.merge.mapfiles =true ; --官方默認(rèn)值,也是當(dāng)前平臺(tái)默認(rèn)值
set hive.merge.mapredfiles = true ; --官方默認(rèn)值,也是當(dāng)前平臺(tái)默認(rèn)值

drop table if exists FDM_SOR.T_FSA_BHVR_NEW_EXPO_D_tmp_tmp;
create table FDM_SOR.t_fsa_bhvr_new_expo_d_tmp_tmp
stored as orc
as
select
*
from FDM_SOR.t_fsa_bhvr_new_expo_d
where stat_date = '20200630'

廢話不多說(shuō),上結(jié)果請(qǐng)看


結(jié)果分析:沒(méi)錯(cuò),第一次MR因?yàn)镃ombinetext啟動(dòng)了438個(gè)map和上面一樣,果然接著又啟動(dòng)了一個(gè)MR,進(jìn)行輸出后的文件合并??礃幼雍蹹IAO。合并要求文件大小不小256Mb,然后實(shí)際呢?pappa。文件雖然減少了很多到351個(gè),但依然有很多小文件,很多小于10Mb的文件,這個(gè)時(shí)候心里肯定一句

3.測(cè)試代碼方案3

放大招,功夫有沒(méi)有,代碼走一走,加上split參數(shù)

set mapred.max.split.size=256000000;  
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;
set hive.merge.mapfiles = true ;
set hive.merge.mapredfiles = true ;
set hive.merge.size.per.task = 256000000 ;
set hive.merge.smallfiles.avgsize=160000000 ;

drop table if exists FDM_SOR.T_FSA_BHVR_NEW_EXPO_D_tmp_tmp;
create table FDM_SOR.T_FSA_BHVR_NEW_EXPO_D_tmp_tmp
stored as orc
as
select
*
from FDM_SOR.T_FSA_BHVR_NEW_EXPO_D
where stat_date = '20200630'

廢話不多說(shuō),上結(jié)果請(qǐng)看:


結(jié)果分析:這下好了,全是大文件,44大文件,每個(gè)大文件都是辣么大,最小的都是48Mb。為啥加了split參數(shù)以后就生效了呢。前面單獨(dú)合并小文件參數(shù)沒(méi)啥效果呢?網(wǎng)上隨便搜一下,都是這種配置這種參數(shù)的?

-- 設(shè)置小文件合并
set hive.merge.mapfiles=true;
set hive.merge.mapredfiles=true;
set hive.merge.size.per.task = 256000000 ;
set hive.merge.smallfiles.avgsize= 256000000 ;

4.答案揭曉

因?yàn)樵O(shè)置上面四個(gè)參數(shù),看上去規(guī)定了map結(jié)束,MR結(jié)束合并文件,如果文件平均小于smallfiles.avgsize啟動(dòng)一個(gè)新的MRj進(jìn)行文件的二次合并。如果啟動(dòng)mr合并文件,沒(méi)有問(wèn)題。但是忽略了一個(gè)問(wèn)題,你重新啟動(dòng)一個(gè)mr合并文件,這個(gè)mr是不是需要進(jìn)行文件split,你這個(gè)參數(shù)搞小了,那就會(huì)產(chǎn)生很多task,很多map,比如很多小文件就是一個(gè)map,最終還是產(chǎn)生很多小文件(因?yàn)楹喜⑿∥募膍r只有map)。所以必須要配合split參數(shù)才有用。具體split參數(shù)使用,參考我其他博客。

本文轉(zhuǎn)載自微信公眾號(hào)「滌生大數(shù)據(jù)」,作者「滌生大數(shù)據(jù)」,可以通過(guò)以下二維碼關(guān)注。

轉(zhuǎn)載本文請(qǐng)聯(lián)系「滌生大數(shù)據(jù)」公眾號(hào)。

責(zé)任編輯:武曉燕 來(lái)源: ·滌生大數(shù)據(jù)
相關(guān)推薦

2023-02-27 15:44:17

Java開(kāi)發(fā)技巧

2023-07-12 07:56:13

CSS規(guī)則元素

2023-01-17 16:25:18

前端開(kāi)發(fā)JSON

2020-04-20 18:15:46

開(kāi)發(fā)自信技術(shù)

2020-07-05 08:01:44

SOC威脅檢測(cè)漏洞

2025-02-25 10:21:12

2024-08-22 18:53:51

2009-07-14 15:39:34

Swing大多數(shù)控件

2013-04-02 10:04:17

iCloud蘋果

2020-05-17 16:10:36

開(kāi)發(fā)人員軟件開(kāi)發(fā)開(kāi)發(fā)

2012-05-30 15:15:42

ibmdw

2023-03-15 07:12:53

企業(yè)開(kāi)發(fā)人員提供商

2022-06-21 10:34:56

芯片短缺供應(yīng)鏈問(wèn)題

2010-08-09 16:09:25

2009-12-11 14:50:14

Visual Basi

2009-11-23 20:07:51

ibmdw開(kāi)發(fā)

2021-02-19 09:33:01

kubernetesJAVA服務(wù)

2020-09-15 12:45:17

智慧城市數(shù)據(jù)城市

2011-05-26 10:50:31

2014-01-02 10:34:54

設(shè)計(jì)設(shè)計(jì)師
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)