mergedelta优化点
1.不带分区的全量hive表,如果wormhole传输数据量为0,即没有更新数据时,不需要进行merge操作
2.优化hive log输出
---------------------------------------------------------------------------------------------------------------------------------------
说明:经统计, 目前全量且wormhole传输量为0的任务实例,一天大概在350个左右。一般merge操作需要5-20分钟,数据量越大越耗时,集群忙碌时越耗时(merge是个MapReduce程序)。对于全量表,如果没有更新数据,执行merge操作是多余的,因此可以优化掉这一过程,能节约时间和集群资源。
方案:在运行完wormhole时,如果是全量表,获取delta表对应hdfs目录下文件大小,如果是0则直接返回即可。有一个问题,由于wormhole一般使用LZO格式写入,使得即使传输数据量为0,在目录下然后会产生多个LZO文件,虽然里面没有实际数据但每一个文件仍会占用40字节大小,导致即使没数据目录下文件大小还是不为0,因此需要修改wormhole相关代码来配合此优化。
wormhole优化点
1.重构HdfsWriter;延迟建立文件,有数据要写入hdfs时才创建文件;调整建LZO索引、add partition失败重试逻辑。
2.创建缓存行时,允许指定包含的字段数;从mysql读取时,根据ResultSet包含的字段数创建相应大小的行
3.重构MysqlReader;分段时存储所有分段完整SQL优化为只需存储上下限值;使用PreparedStatement替代Statement