Skip to main content

将数据迁移到 JuiceFS

Hive, Spark, Impala

Hive 等数据仓库表的数据可以在不同的文件系统,迁移数据时可以使用 distcp 将 HDFS 中的数据拷贝至 JuiceFS,然后用 alter table 更新表的数据位置即可。

同一张表的不同分区的数据也可以在不同的文件系统,可以修改写入数据的代码,在插入新的分区数据时使用 JuiceFS,然后再逐步将已有分区的数据使用 distcp 拷贝过来后再更新分区的数据位置。

HBase

环境准备

您需要准备一个相同配置的 HBase 集群。

离线迁移

原 HBase 集群中关闭所有表:

bin/disable_all_tables.sh

新的 JuiceFS HBase 集群中,

  • 通过 distcp 导入数据

    sudo -u hbase hadoop distcp -Dmapreduce.map.memory.mb=1500 your_filesystem/hbase/data jfs://your_jfs/hbase/data
  • 删除 HBase 元数据

    sudo -u hbase hadoop fs -rm -r jfs://your_jfs/hbase/data/hbase
  • 修复元数据

    sudo -u hbase hbase hbck -fixMeta -fixAssignments

在线迁移

接下来的操作会将历史数据导入新的 JuiceFS HBase 集群,并且和原 HBase 集群保持同步,一旦数据同步成功后,可以将业务切换到新的 JuiceFS HBase 集群。

原 HBase 集群中,

  • 打开 replication

    add_peer '1', CLUSTER_KEY => "jfs_zookeeper:2181:/hbase",TABLE_CFS => { "your_table" => []}
    enable_table_replication 'your_table'

    此操作会在 JuiceFS HBase 集群自动创建表(包括 splits )

  • 关闭同步

    disable_peer("1")
  • 创建快照

    snapshot 'your_table','your_snapshot'

新的 JuiceFS HBase 集群中,

  • 导入快照

    sudo -u hbase hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
    -snapshot your_snapshot \
    -copy-from s3://your_s3/hbase \
    -copy-to jfs://your_jfs/hbase \
    -mappers 1 \
    -bandwidth 20

    您可以根据需要调整 map 数和带宽(MB/s)

  • 恢复快照

    disable 'your_table'
    restore_snapshot 'your_snapshot'
    enable 'your_table'

原 HBase 集群中打开同步:

enable_peer("1")