gbase不落地交换数据到Hadoop文件数较多影响hadoop性能优化解决
项目上同时使用gbase和hadoop,每天存在很多数据交换任务。随着时间推移,hadoop发现性能受影响,经分析原因为很多交互的表,虽然表不大,但存储文件很多,达数千万之多。为此hadoop测提出优化数据导入到hadoop文件数进行优化。
优化办法有两个,一种是使用落地导出方式。即通过文件服务器,将gbase的数据汇总到1个文件或少量文件,再导入hadoop。然而此方法会增加数据交换的工作量,需要改动的脚本太多。从而被放弃;另一种就是通过gbase不落地导出语句增加一个参数,完成文件合并;
gbase导出语法提供了filecount来控制文件数。参数最小值为 0,最大值为 UINT_MAX(4294967295),默认值为 0,表示不限制文件导出个数。仅对导出 HDFS 文件有效。在不指定 FILESIZE 参数时,实际导出 HDFS 文件个数为FILECOUNT 和数据主分片数二者的最小值。当使用默认值时,每个主分片导出为一个 HDFS 文件。指定文件数导出时,系统会分批节点依次写入文件,因此导出性能会受影响。当前gbase集群共有98个节点,采用2分片的模式。默认情况下不落地到hadoop会产生2*98=196个文件,对于小表的迁移,形成的碎文件就显得过多了。
语法如下:
原语句:
select * from dwctrx.tbname_tc_usr_2020_new_busi_48267_xuanxx into outfile 'HDP://135.88.145.21:8020/apps/hive/warehouse/dwd.db/tb_space_test1/day_id=20240220?user=xuanxuxian' character set utf8 outfilemode by hdfs writemode by overwrites FIELDS TERMINATED BY '\t' ;
新语句:
select * from dwctrx.tbname_tc_usr_2020_new_busi_48267_xuanxx into outfile 'HDP://135.88.145.21:8020/apps/hive/warehouse/dwd.db/tb_space_test1/day_id=20240220?user=xuanxuxian' character set utf8 outfilemode by hdfs writemode by overwrites FIELDS TERMINATED BY '\t' filecount 1 ;
评论
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526