Export a snapshot to another cluster
You can export any snapshot from one cluster to another. Exporting the snapshot copies the table's hfiles, logs, and the snapshot metadata, from the source cluster to the destination cluster.
-copy-from
option to copy from a
remote cluster to the local cluster or another remote cluster. If you do not specify the
-copy-from
option, the hbase.rootdir in the HBase configuration
is used, which means that you are exporting from the current cluster. You must specify the
-copy-to
option, to specify the
destination cluster.
The ExportSnapshot
tool executes a MapReduce Job
similar to distcp
to copy files to the other cluster.
It works at file-system level, so the HBase cluster can be
offline.
Run ExportSnapshot
as the hbase
user or the user that owns the files. If the user, group, or
permissions need to be different on the destination cluster than the
source cluster, use the -chuser,
-chgroup,
or -chmod
options as in
the second example below, or be sure the destination directory has the
correct permissions. In the following examples, replace the HDFS
server path and port with the appropriate ones for your cluster.
To copy a snapshot called MySnapshot to an HBase cluster srv2 (hdfs://srv2:8020/hbase) using 16 mappers:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot MySnapshot -copy-to hdfs://srv2:<hdfs_port>/hbase -mappers 16
To export the snapshot and change the ownership of the files during the copy:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot MySnapshot -copy-to hdfs://srv2:<hdfs_port>/hbase -chuser MyUser -chgroup MyGroup -chmod 700 -mappers 16
-D
option in many tools to
specify MapReduce or other configuration properties. For example, the
following command copies MY_SNAPSHOT
to
hdfs://cluster2/hbase using groups of 10 hfiles
per
mapper:hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -Dsnapshot.export.default.map.group=10 -snapshot MY_SNAPSHOT -copy-to hdfs://cluster2/hbase
(The
number of mappers is calculated as
TotalNumberOfHFiles
/10.)
To export from one remote cluster to another remote cluster,
specify both -copy-from
and
-copy-to
parameters.
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snapshot-test -copy-from hdfs://machine1/hbase -copy-to hdfs://machine2/my-backup
-target
option.
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot snapshot-test -copy-from hdfs://machine1/hbase -copy-to hdfs://machine2/my-backup -target new-snapshot