更新时间:2023-03-17 GMT+08:00

迁移Spark1.5的Carbondata数据到Spark2x的Carbondata中

迁移方案概览

本次迁移目标是将Spark1.5的CarbonData表数据迁移到Spark2x的CarbonData表中。

执行本操作前需要将spark1.5的carbondata表入库业务中断,将数据一次性迁移至spark2x的carbondata表,完成迁移后使用spark2x进行业务操作。

迁移思路:

  1. 先通过Spark1.5将历史数据迁移至中间表。
  2. 再通过Spark2x将中间表的数据迁移至目标表,然后将目标表名修改为原表名。
  3. 迁移完成后使用Spark2x操作CarbonData表中的数据。

具体迁移方案和命令

历史数据迁移

  1. 中断CarbonData的数据入库业务,用Spark1.5的spark-beeline,查看CarbonData表当前最新的Segment的ID和时间,并记录此Segment的ID。

    show segments for table dbname.tablename;

  2. 用创建原CarbonData表的用户,执行Spark1.5的spark-beeline,创建ORC(或PARQUET)格式的中间表,然后将原CarbonData表中的数据导入该中间表,导入完成后即可恢复CarbonData表的业务。

    创建ORC表:

    CREATE TABLE dbname.mid_tablename_orc STORED AS ORC as select * from dbname.tablename;

    创建PARQUET表:

    CREATE TABLE dbname.mid_tablename_parq STORED AS PARQUET as select * from dbname.tablename;

    其中dbname指数据库名,tablename指原CarbonData表名。

  3. 用创建原CarbonData表的用户,执行Spark2x的spark-beeline;然后通过旧表的建表语句,创建新的CarbonData表。

    创建新表的语句中,字段顺序和类型必须和旧表的完全一致,如此才能保留原表的索引列等结构,且可以避免后续插入数据时因用到了 select * 而出错。

    通过Spark1.5的spark-beeline命令查看旧表的建表语句:SHOW CREATE TABLE dbname.tablename;

    创建新CarbonData表,名称为:dbname.new_tablename

  4. 用创建原CarbonData表的用户,执行Spark2x的spark-beeline,将2中创建的ORC(或PARQUET)格式的中间表的数据,加载到3创建的新表中。此步骤可能耗时较长(200G数据耗时约2小时)。加载数据的命令以ORC格式的中间表举例:

    insert into dbname.new_tablename select *

    from dbname. mid_tablename_orc;

  5. 用创建原CarbonData表的用户,执行Spark2x的spark-beeline,对新表的数据进行查询检验,确认数据无误后,将原CarbonData表修改为其他名称,再将新CarbonData表修改为原CarbonData表的名称。

    ALTER TABLE dbname.tablename RENAME TO dbname.old_tablename;

    ALTER TABLE dbname.new_tablename RENAME TO dbname.tablename;

  6. 迁移完成。此时即可通过Spark2x对新表进行查询、重建二级索引等操作。