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接口的對象存儲的數據源。 |
|
使用方法
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
建議按照以下方式排查解決:
檢查舊集群是否有ACL規則要同步。
如果有ACL規則要同步,DistCp參數后要加-p同步權限參數。如果DistCp操作提示“xx集群不支持ACL”,說明對應集群沒有配置ACL規則。如果新集群沒有配置ACL規則,可以修改配置并重啟NameNode。如果是提示舊集群不支持ACL,說明舊集群沒有ACL方面的設置,也不需要同步,去掉-a參數即可。
檢查新舊集群的dfs.permissions.enabled和dfs.namenode.acls.enabled的配置是否一致。
如果不一致,需要將新舊集群的這兩個參數的值修改成一致或者不同步ACL。
DistCp運行出現Out of Memory異常,如何處理?
開源DistCp會把要復制的Path列表存儲在客戶端內存,如果文件量超過一定閾值或者文件名較長,例如文件量達到一百萬條,會出現Out of Memory異常,此時可通過以下命令在客戶端設置更多內存。
export HADOOP_CLIENT_OPTS="-Xmx1024m"
hadoop distcp /source /target