更新时间:2024-11-29 GMT+08:00

迁移CarbonData数据

操作场景

如果用户需要快速从一个集群中将CarbonData的数据迁移到另外一个集群的CarbonData中,可以使用CarbonData的数据备份与恢复命令来完成该任务。使用此方法迁移数据,无需在新集群执行数据导入的过程,可以减少迁移的时间。

前提条件

两个集群已安装Spark客户端,例如安装目录为“/opt/client”。假设原始数据所在集群为A,需要迁移到集群B。

操作步骤

  1. 使用客户端安装用户登录A集群客户端所在节点。
  2. 使用客户端用户执行以下命令,配置环境变量。

    source /opt/client/bigdata_env

    source /opt/client/Spark/component_env

  3. 如果集群为安全模式,执行以下命令进行用户认证。普通模式集群无需执行用户认证。

    kinit carbondatauser

    carbondatauser需要为原始数据的使用者,即拥有表的读写权限。

    该用户需要加入hadoop,hive组,主组选择hadoop组,并关联角色System_administrator。

  4. 执行以下命令连接数据库,并查看表的数据在HDFS保存的位置:

    spark-beeline

    desc formatted 原始数据的表名称;

    查看系统显示的信息中“Location”表示数据文件所在目录。

  5. 使用客户端安装用户登录B集群客户端所在节点,并执行以下命令,配置环境变量。

    source /opt/client/bigdata_env

    source /opt/client/Spark/component_env

  6. 如果集群为安全模式,执行以下命令进行用户认证。普通模式集群无需执行用户认证。

    kinit carbondatauser2

    carbondatauser2需要为上传数据的用户。

    该用户需要加入hadoop,hive组,主组选择hadoop组,并关联角色System_administrator。

  7. 执行spark-beeline命令连接数据库。
  8. 原始数据对应的数据库是否存在?

    • 是,执行9
    • 否,执行命令create database 数据库名称,创建一个同名的数据库,然后执行9

  9. 将原始数据从集群A的HDFS目录中,拷贝数据到集群B的HDFS中。

    在集群B上传数据时,上传目录中需要存在与原始目录有相同的数据库以及表名目录,且上传用户需要有在此目录写入数据的权限。上传后该用户将拥有数据的读写权限。

    例如,原始数据保存在“/user/carboncadauser/warehouse/db1/tb1”,则在新集群中数据可以保存在“/user/carbondatauser2/warehouse/db1/tb1”中:

    1. 下载原始数据到集群A的“/opt/backup”目录下:

      hdfs dfs -get /user/carboncadauser/warehouse/db1/tb1 /opt/backup

    2. 拷贝集群A的原始数据到集群B客户端节点的“/opt/backup”目录下:

      scp /opt/backup root@集群B客户端节点IP:/opt/backup

    3. 上传拷贝到集群B的数据到HDFS中:

      hdfs dfs -put /opt/backup /user/carbondatauser2/warehouse/db1/tb1

  10. 在集群B的客户端环境执行以下命令,在Hive中生成原始数据对应的表所关联的元数据:

    REFRESH TABLE $dbName.$tbName;

    $dbName和$tbName分别表示数据对应的数据库名称以及表名称。

  11. 如果原表存在索引表,执行910,将集群A的索引表目录迁移到集群B。
  12. 执行以下命令,为CarbonData表注册索引表(注意,如果原表没有创建索引表,则不需要执行此步骤):

    REGISTER INDEX TABLE $tableName ON $maintable;

    $tableName和$maintable分别表示索引表名称和主表名称。