全部產品
Search
文件中心

E-MapReduce:Hadoop DistCp介紹

更新時間:Jul 01, 2024

Hadoop DistCp(分布式複製)是一個用於大型叢集間或叢集內資料複製的工具,通過MapReduce實現複製過程中資料的分發、錯誤處理、恢複及報告。本文為您介紹Hadoop DistCp與Jindo DistCp的區別、Hadoop DistCp使用方法以及常見問題。

說明

Hadoop DistCp的功能和使用方法等詳細資料,請參見Hadoop社區的DistCp使用文檔

Hadoop DistCp和Jindo DistCp的區別

DistCp類型

功能

使用情境

Hadoop DistCp

開源Hadoop內建的DistCp工具,用於大型叢集間或叢集內資料的複製。

HDFS到HDFS間的資料複製。

Jindo DistCp

JindoFS的資料移轉工具,支援OSS、OSS-HDFS服務、相容S3介面的Object Storage Service的資料來源。

  • 匯入HDFS資料至OSS或OSS-HDFS服務。

  • 匯入S3資料至OSS或OSS-HDFS服務。

使用方法

Hadoop DistCp最常見的調用是叢集間拷貝,例如將nn1叢集的/foo/bar目錄下的資料拷貝至nn2叢集的/bar/foo目錄下:

hadoop distcp hdfs://nn1:8020/foo/bar hdfs://nn2:8020/bar/foo

更多使用說明,請參見Hadoop社區的DistCp使用文檔

常見問題

如何使用Hadoop DistCp遷移HDFS資料到另一個HDFS叢集?

叢集之間的HDFS資料移轉需要先確保網路的打通,然後再使用Hadoop DistCp工具進行遷移,具體操作請參見E-MapReduce資料移轉方案

出現ACLs not supported on at least one file system異常,如何處理?

具體報錯:org.apache.hadoop.tools.CopyListing$AclsNotSupportedException: ACLs not supported for file system: hdfs://xx.xx.xx.xx:8020

建議按照以下方式排查解決:

  1. 檢查舊叢集是否有ACL規則要同步。

    如果有ACL規則要同步,DistCp參數後要加-p同步許可權參數。如果DistCp操作提示“xx叢集不支援ACL”,說明對應叢集沒有配置ACL規則。如果新叢集沒有配置ACL規則,可以修改配置並重啟NameNode。如果是提示舊叢集不支援ACL,說明舊叢集沒有ACL方面的設定,也不需要同步,去掉-a參數即可。

  2. 檢查新舊叢集的dfs.permissions.enableddfs.namenode.acls.enabled的配置是否一致。

    如果不一致,需要將新舊叢集的這兩個參數的值修改成一致或者不同步ACL。

DistCp運行出現Out of Memory異常,如何處理?

開源DistCp會把要複製的Path列表格儲存體在用戶端記憶體,如果檔案量超過一定閾值或者檔案名稱較長,例如檔案量達到一百萬條,會出現Out of Memory異常,此時可通過以下命令在用戶端設定更多記憶體。

export HADOOP_CLIENT_OPTS="-Xmx1024m"
hadoop distcp /source /target