将数据迁移到 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")