s3-dist-cp 是 AWS EMR 內置的用于 S3 和 HDFS 之間文件拷貝的專用工具,與 Hadoop 的 distcp 類似,也是通過 Map-Reduce 作業的方式實現分布式的文件復制(distcp 就是 distributed copy 分布式拷貝的意思)。
s3-dist-cp 并不是一個簡單的在 S3 和 HDFS 之間拷貝文件的工具,因為它并不是一個獨立運行的命令行工具,而是要依靠 EMR 集群提交 MR 作業。實際上,它更多應用在超大數據集的遷移上,例如將原來 HDFS 上的構建的數據湖整體遷移到 S3 上,或者將 S3 上存放的 HBase 備份快照拉到 EMR 集群的本地 HDFS 上進行恢復,這些操作都要復制體量超大的數據,只有借助 MR 作業進行分布式的拷貝,才有可能在較短時間內完成。
s3-dist-cp 的復制速度非常快,除了因為其本身是 MR 形式的分布式作業外,它的實現方式也決定了它要比普通的 MR 導入導出作業要快,一個很有說明性的例子就是 HBase 的 snapshot export
命令,這一命令也是一個 MR 作業,當 -copy-from
和 -copy-to
分別是 S3 和 HDFS 路徑時,它也本質上也是在 S3 和 HDFS 之間拷貝數據,但測試表明,它的速度遠不如 s3-dist-cp (多出1.5倍或更多時間)。目前沒有關于 s3-dist-cp 實現細節的資料,推測可能是對下載的多個文件做了某種合并處理,以更大的文件形式統一下載。
以下是一個使用 s3-dist-cp 從 S3 上下載 HBase 快照到 本地 HDFS 的示例: