A common use scenario (scenaio 1):
- create snapshot sx in clusterX,
- do some experiemnts in clusterX, which creates some files.
- throw away the files changed and go back to sx.
Another scenario (scenario 2) is, there is a production cluster and a backup cluster, we periodically sync up the data from production cluster to the backup cluster with distcp.
The cluster in scenario 1 could be the backup cluster in scenario 2.
For scenario 1:
HDFS-4167 intends to restore HDFS to the most recent snapshot, and there are some complexity and challenges. Before that jira is implemented, we count on distcp to copy from snapshot to the current state. However, the performance of this operation could be very bad because we have to go through all files even if we only changed a few files.
For scenario 2:
HDFS-7535 improved distcp performance by avoiding copying files that changed name since last backup.
On top of
HDFS-7535, HDFS-8828 improved distcp performance when copying data from source to target cluster, by only copying changed files since last backup. The way it works is use snapshot diff to find out all files changed, and copy the changed files only.
This jira is to propose a variation of
HDFS-8828, to find out the files changed in target cluster since last snapshot sx, and copy these from snapshot sx of either the source or the target cluster, to restore target cluster's current state to sx.
If a file/dir is
- renamed, rename it back
- created in target cluster, delete it
- modified, put it to the copy list
- run distcp with the copy list, copy from the source cluster's corresponding snapshot
This could be a new command line switch -rdiff in distcp.