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