扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章给大家分享的是有关hive文件输出如何优化的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
创新互联公司是专业的北川羌族网站建设公司,北川羌族接单;提供成都网站设计、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行北川羌族网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
开发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文件输出如何优化”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流