Hive 0.13到Hive 2.1跨版本升级全姿势与避坑指南(3)
时间:2019-02-17 12:53 来源:百度新闻 作者:巧天工 点击:次
hive.driver.parallel.compilation参数默认为false,导致HS2只允许同时一个Query编译, 有操作元数据比较多的查询编译读取元数据会比较慢,全局锁会卡住所有其他查询。 需要设置为false,打开允许多个Query同时编译。 7、基于Database的Stats收集策略被弃用 Hive2.1的Stats收集只能使用基于HDFS的策略,而StatsTask是单线程运行读取HDFS上的统计文件(文件数量等于Mapper数量),因为HDFS抖动导致了很多性能问题。 极端情况下,发现过一个statsTask会执行1个小时之久。 我们正在考虑把Stats Task禁掉,或者切换回基于Database的Stats收集策略。 8、Column Pruning时候导致列顺序错误问题 Column Pruning时导致列顺序错误,造成处理时ArrayIndexOutOfBoundsException。 在一些复杂的SQL里增加limit会发生,参考HIVE-14564来解决。 9、我们Team回馈社区的一些patch Alter table Cascade时候的NPE问题:HIVE-16877 https://issues.apache.org/jira/browse/HIVE-16877 Drop掉分区后执行insert overwrite报错问题(这个问题比较严重,有可能不报错,但是会引入脏数据):HIVE-17063 https://issues.apache.org/jira/browse/HIVE-17063 非当前库内Alter partition的异常问题:HIVE-17309 https://link.zhihu.com/?target=https%3A//issues.apache.org/jira/browse/HIVE-17309 六、其它一些踩过的坑 1、元数据数据库连接数打满问题 元数据直连数据库方式下,当并发服务量非常巨大时候,MySQL默认连接数是4000,比较容易打满。 解决方法: (1)直连使用BoneCP连接池方式下,maxConnectionsPerPartition默认值为10,一个客户端会建立20个连接,可以降低为2,并且降低连接池的活跃度。 可以考虑在$HIVE_CONF_DIR下增加一个bonecp-config.xml: 512true (2)提升数据库连接数最大值,可能会有稳定性风险。 (3)使用Metastore Server,这是比较通用的做法,一个Metastore Server扛10000+个客户端连接,后端400个数据库连接毫无压力。 Metastore Server生产化实践可以参考我们的另一篇文章,请Google搜索《Hive Metastore Server生产化实践》。 七、总结 1、升级流程 总结之前的分析,从0.13升级到2.1版本,升级过程可以达到完全灰度和平滑。 具体的升级流程如下: 元数据schema备份。 提前批量校验线上SQL,解决语法兼容性问题。 元数据只升级hive-13076中的脚本,建立KEY_CONSTRAINTS表和表上的索引。 定制化Hive代码,根据使用场景解决2.1里面存在的UDF和其他的一些问题。 开始灰度升级Hive 2.1客户端,HiveServer2,最后是Metastore Server。 Hive2.1客户端稳定后,根据需要部分或者全量来将元数据schema升级到2.1.1版本。 最后依次升级Hive JDBC连接客户端。(非必需) 2、未来计划 未来对于Hive On MapReduce执行慢的问题,我们计划逐渐把主要SQL引擎切换SparkSQL,Hive只承担兜底和降级的角色。 同时我们计划实现一个统一的大数据平台SQL引擎,在计算引擎层,合并Kylin、Presto、SparkSQL和Hive等几种引擎, 提供一个统一的路由层,发挥各个引擎的最佳性能; 在数据缓存层,结合SQL画像和历史执行情况,缓存中间热表数据,自动建立Kylin Cube。 在数据存储层,引入CarbonData文件格式,做数据层索引加速。 同时由于Hive定义的元数据规范已经成为大数据平台的事实标准,我们会继续沿用这种标准,所以在和社区一起推动CarbonData和Hive元数据的兼容,欢迎关注CarbonData。 目前正在开发阶段,敬请期待后继的介绍文章。 八、附录 1、Hive JDBC客户端和HiveServer2各版本之间兼容性 2、从0.13开始的元数据Schema升级明细和影响分析 github gist https://link.zhihu.com/?target=https%3A//gist.github.com/ericsahit/9622411305e42bf6735197fdec612794 (责任编辑:波少) |