迁移CarbonData数据
操作场景
如果用户需要快速从一个集群中将CarbonData的数据迁移到另外一个集群的CarbonData中,可以使用CarbonData的数据备份与恢复命令来完成该任务。使用此方法迁移数据,无需在新集群执行数据导入的过程,可以减少迁移的时间。
前提条件
两个集群已安装Spark2x客户端,例如安装目录为“/opt/client”。假设原始数据所在集群为A,需要迁移到集群B。
操作步骤
- 使用客户端安装用户登录A集群客户端所在节点。
- 使用客户端用户执行以下命令,配置环境变量。
source /opt/client/bigdata_env
source /opt/client/Spark2x/component_env
- 如果集群为安全模式,执行以下命令进行用户认证。普通模式集群无需执行用户认证。
kinit carbondatauser
carbondatauser需要为原始数据的使用者,即拥有表的读写权限。
该用户需要加入hadoop,hive组,主组选择hadoop组,并关联角色System_administrator。
- 执行以下命令连接数据库,并查看表的数据在HDFS保存的位置:
spark-beeline
desc formatted 原始数据的表名称;
查看系统显示的信息中“Location”表示数据文件所在目录。
- 使用客户端安装用户登录B集群客户端所在节点,并执行以下命令,配置环境变量。
source /opt/client/bigdata_env
source /opt/client/Spark2x/component_env
- 如果集群为安全模式,执行以下命令进行用户认证。普通模式集群无需执行用户认证。
kinit carbondatauser2
carbondatauser2需要为上传数据的用户。
该用户需要加入hadoop,hive组,主组选择hadoop组,并关联角色System_administrator。
- 执行spark-beeline命令连接数据库。
- 原始数据对应的数据库是否存在?
- 将原始数据从集群A的HDFS目录中,拷贝数据到集群B的HDFS中。
在集群B上传数据时,上传目录中需要存在与原始目录有相同的数据库以及表名目录,且上传用户需要有在此目录写入数据的权限。上传后该用户将拥有数据的读写权限。
例如,原始数据保存在“/user/carboncadauser/warehouse/db1/tb1”,则在新集群中数据可以保存在“/user/carbondatauser2/warehouse/db1/tb1”中:
- 在集群B的客户端环境执行以下命令,在Hive中生成原始数据对应的表所关联的元数据:
REFRESH TABLE $dbName.$tbName;
$dbName和$tbName分别表示数据对应的数据库名称以及表名称。
- 如果原表存在索引表,执行9和10,将集群A的索引表目录迁移到集群B。
- 执行以下命令,为CarbonData表注册索引表(注意,如果原表没有创建索引表,则不需要执行此步骤):
REGISTER INDEX TABLE $tableName ON $maintable;
$tableName和$maintable分别表示索引表名称和主表名称。