微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

hive文件输出如何优化

这篇文章给大家分享的是有关hive文件输出如何优化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

开发ETL工具,抽取数据时遇到这样一个问题。hive执行sql语句MR执行只用了1分钟,相应的数据记录写到本地文件中间有十多分钟的时间都在写文件。细致的研究了一下hive导出文件的方式有两种方式:

第一种:大家最常用的,最后结果是生成一个文件。操作方便。因为是单行写文件cpu,IO浪费严重。

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来写文件。多线程并发写文件,结果为多分文件。充分利用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"

通过测试第一种需要11分钟左右,第二种二十秒搞定。

对于第二种产生多个文件进行load到数据库或者做一次本地的文件合并

cat ./* | sed 's/NULL/\\N/g' > all.data  (将文本中的NULL替换成\N,保障背mysql识别位空)。

或者循环load进数据库

感谢各位的阅读!关于“hive文件输出如何优化”这篇文章分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐