hive文件输出如何优化

发布时间:2021-12-10 10:01:44 作者:小新
来源:亿速云 阅读:158

这篇文章给大家分享的是有关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文件输出如何优化”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

推荐阅读:
  1. hive高级操作(优化,数据倾斜优化)
  2. hive on tez sql 优化

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

hive

上一篇:flume的功能是什么

下一篇:hadoop多文件输出新旧API的方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》