01保留历史数据的现场
在数据迁移的过程中,尽量增大旧历史数据保存天数,比如:yarn-history、spark-history以及备份数据、日志。在割接后任务的性能问题是一个大问题,不只是堆机器这么简单,如何能快速的找到数据问题的根源,一般就是要和历史数据/执行计划进行对比。
02不做任何不可逆的操作
任何不可逆的操作都存在风险,无论是下应用,还是删数据。尤其是一些有状态的或手工部署的应用,以及一些看似没用的数据和脚本。宁可麻烦一些,给自己留下退路。
03数据校验尽量双跑
数据校验是整个迁移的重中之重,一般有三个方面:1. 对比测试集群和原始集群双跑对比相同任务脚本产出数据。2. 对比原始集群和线上集群历史数据。3.对比原始集群和线上集群经过增量同步的数据。
一般历史数据迁移并没有太大问题,出现问题多的一般是增量同步数据导致,在增量同步过程一般根据文件更新时间进行同步,但是需要注意的是对于临时snapshot的问题不能进行同步,否则新集群读取会有问题。双跑是必须要做的,并且务必对核心链路的数据进行对比,从性能和数据完整性两方面。
04开源组件
对于一些底层组件如hadoop、hive、 spark等,拥抱开源是很重要的第一点,尤其是对于一些想要上云的企业,对于修改了一些自定义代码的组件,原始集群运行稳定,但是新集群可能就水土不服,一些很小的问题都需要做大量的排查。对于一些有规模的企业来说,如果有底层更改的需求,尽量同步到社区,然后更新到线上,拥抱开源是一种责任,也是给自己未来铺路。
05历史包袱
基本上每个集群都有很多历史包袱,包括不同语言差异导致,业务导致,依赖导致,人员流动导致。而且很多历史包袱还是核心功能,牵一发而动全身。所以一个平台想要做的更加长远,不能只是追求新技术,对业务方服务,更要去做历史系统的整合,梳理,优化。