十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章給大家分享的是有關(guān)hive文件輸出如何優(yōu)化的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)公司是專業(yè)的北川羌族網(wǎng)站建設(shè)公司,北川羌族接單;提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行北川羌族網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
開發(fā)ETL工具,抽取數(shù)據(jù)時(shí)遇到這樣一個(gè)問題。hive執(zhí)行sql語(yǔ)句MR執(zhí)行只用了1分鐘,相應(yīng)的數(shù)據(jù)記錄寫到本地文件中間有十多分鐘的時(shí)間都在寫文件。細(xì)致的研究了一下hive導(dǎo)出文件的方式有兩種方式:
第一種:大家最常用的,最后結(jié)果是生成一個(gè)大文件。操作方便。因?yàn)槭菃涡袑懳募?,CPU,IO浪費(fèi)嚴(yán)重。
hive -e "use dw;select detail.siid siid, si.basic_class1_id, si.basic_class1_name, si.basic_class2_id, si.basic_class2_name, si.classify, si.bi_name, city_id, city.name city_name, operate_area, object_id, operate_type, operate_type_text, instock_amount, instock_price, instock_total, outstock_amount, outstock_price, outstock_total, stock_amount, stock_cost, stock_total, sale_price, sale_total, profit_total, operate_origin_amount, operate_origin_price, from_unixtime(operate_time,'yyyyMMdd HH:mm:ss'), if(delivery_datekey is null,0,delivery_datekey), financial_origin_adjustment, warehouse_origin_adjustment from dw.dw_wms_operate_flow_detail_v2 detail left join dw.dw_goods_standard_item si on detail.siid=si.id left join dim.dim_city city on city.id=detail.city_id where delivery_datekey>=20151213" > /home/meicai/test/data.txt
第二種方式:INSERT OVERWRITE LOCAL DIRECTORY '/home/meicai/test' row format delimited FIELDS TERMINATED BY '\t' 在hive中指定文件后。由mapper或者reduce來寫文件。多線程并發(fā)寫文件,結(jié)果為多分文件。充分利用CPU和IO等資源。
hive -e "use dw;INSERT OVERWRITE LOCAL DIRECTORY '/home/meicai/test' row format delimited FIELDS TERMINATED BY '\t' select detail.siid siid, si.basic_class1_id, si.basic_class1_name, si.basic_class2_id, si.basic_class2_name, si.classify, si.bi_name, city_id, city.name city_name, operate_area, object_id, operate_type, operate_type_text, instock_amount, instock_price, instock_total, outstock_amount, outstock_price, outstock_total, stock_amount, stock_cost, stock_total, sale_price, sale_total, profit_total, operate_origin_amount, operate_origin_price, from_unixtime(operate_time,'yyyyMMdd HH:mm:ss'), if(delivery_datekey is null,0,delivery_datekey), financial_origin_adjustment, warehouse_origin_adjustment from dw.dw_wms_operate_flow_detail_v2 detail left join dw.dw_goods_standard_item si on detail.siid=si.id left join dim.dim_city city on city.id=detail.city_id where delivery_datekey>=20151212"
通過測(cè)試第一種需要11分鐘左右,第二種二十秒搞定。
對(duì)于第二種產(chǎn)生多個(gè)文件進(jìn)行l(wèi)oad到數(shù)據(jù)庫(kù)或者做一次本地的文件合并
cat ./* | sed 's/NULL/\\N/g' > all.data (將文本中的NULL替換成\N,保障背MySQL識(shí)別位空)。
或者循環(huán)load進(jìn)數(shù)據(jù)庫(kù)。
感謝各位的閱讀!關(guān)于“hive文件輸出如何優(yōu)化”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!