The most common use of DistCp is an inter-cluster copy:
hadoop distcp hdfs://nn1:8020/source hdfs://nn2:8020/destination
Where hdfs://nn1:8020/source
is the data source, and hdfs://nn2:8020/
destination is the destination. This will expand the name space under /source on NameNode "nn1" into a temporary file, partition its contents among a set of map tasks, and start copying from "nn1" to "nn2". Note that DistCp requires absolute paths.
You can also specify multiple source directories:
hadoop distcp hdfs://nn1:8020/source/a hdfs://nn1:8020/source/b hdfs:// nn2:8020/destination
Or specify multiple source directories from a file with the -f
option:
hadoop distcp -f hdfs://nn1:8020/srclist hdfs://nn2:8020/destination
Where srclist
contains:
hdfs://nn1:8020/source/a hdfs://nn1:8020/source/b
DistCp from HDP-1.3.x to HDP-2.x
When using DistCp to copy from a HDP-1.3.x cluster to a HDP-2.x cluster, the format is:
hadoop distcp hftp://<hdp 1.3.x namenode host>:50070/<folder path of source> hdfs://<hdp 2.x namenode host>/<folder path of target>
Here is an example of a DistCp copy from HDP 1.3.0 to HDP-2.0:
hadoop distcp hftp://namenodehdp130.test.com:50070/apps/hive/warehouse/db/ hdfs://namenodehdp20.test.com/data/raw/
When copying from multiple sources, DistCp will abort the copy with an error message if two sources collide, but collisions at the destination are resolved based on the options specified. By default, files already existing at the destination are skipped (i.e. not replaced by the source file). A count of skipped files is reported at the end of each job, but it may be inaccurate if a copier failed for some subset of its files, but succeeded on a later attempt.
It is important that each NodeManager is able to communicate with both the source and destination file systems. For HDFS, both the source and destination must be running the same version of the protocol, or use a backwards-compatible protocol; see Copying Between Versions.
After a copy, you should generate and cross-check a listing of the source and
destination to verify that the copy was truly successful. Since DistCp employs both Map/Reduce
and the FileSystem API, issues in or between any of these three could adversely and silently
affect the copy. Some have had success running with -update
enabled to
perform a second pass, but users should be acquainted with its semantics before attempting
this.
It is also worth noting that if another client is still writing to a source file, the copy will likely fail. Attempting to overwrite a file being written at the destination should also fail on HDFS. If a source file is (re)moved before it is copied, the copy will fail with a FileNotFound exception.