运行 来自 spring 在 hadoop 2.x 中的 distcp 作业

running a distcp job from spring in hadoop 2.x

我一直在我的项目中使用 spring data hadoop,并且能够 运行 hadoop 1.x 中的 distcp 作业。最近我们升级到 hadoop 2.x,为此我将 spring-data-hadoop 升级到 2.0.4。大多数东西仍在工作,但我 运行 正在处理 distcp 的一些问题。似乎 spring data hadoop 正在像这样调用 distcp

Class<org.apache.hadoop.tools.DistCp> cl = org.apache.hadoop.tools.DistCp.class;
Class<?> argClass = ClassUtils.resolveClassName("org.apache.hadoop.tools.DistCp$Arguments",
                cl.getClassLoader());

https://github.com/spring-projects/spring-hadoop/blob/2.0.4.RELEASE/spring-hadoop-core/src/main/java/org/springframework/data/hadoop/fs/DistCp.java#L274-L275

请注意 spring 代码正在 Distcp class 中寻找 Arguments 内部 class 但这个内部 class 似乎没有在较新的 Distcp 代码中不再存在。当我 运行 工作时我得到这个错误

Caused by: java.lang.IllegalStateException: Cannot run distCp impersonated as 'null'
        at org.springframework.data.hadoop.fs.DistCp.copy(DistCp.java:268) ~[spring-data-hadoop-core-2.0.4.RELEASE.jar:2.0.4.RELEASE]
        at org.springframework.data.hadoop.fs.DistCp.copy(DistCp.java:216) ~[spring-data-hadoop-core-2.0.4.RELEASE.jar:2.0.4.RELEASE]
        at org.springframework.data.hadoop.fs.DistCp.copy(DistCp.java:152) ~[spring-data-hadoop-core-2.0.4.RELEASE.jar:2.0.4.RELEASE]
        at com.att.hadoop.hdfspub.source.hdfs.HdfsFileCopier.copyFolder(HdfsFileCopier.java:104) ~[classes/:na]
        ... 45 common frames omitted
Caused by: java.lang.IllegalArgumentException: Cannot find class [org.apache.hadoop.tools.DistCp$Arguments]
        at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:286) ~[spring-core-4.1.4.RELEASE.jar:4.1.4.RELEASE]
        at org.springframework.data.hadoop.fs.DistCp.invokeCopy(DistCp.java:275) ~[spring-data-hadoop-core-2.0.4.RELEASE.jar:2.0.4.RELEASE]
        at org.springframework.data.hadoop.fs.DistCp.copy(DistCp.java:265) ~[spring-data-hadoop-core-2.0.4.RELEASE.jar:2.0.4.RELEASE]
        ... 48 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.tools.DistCp$Arguments

在我的 pom.xml 中,我包含了 spring-data-hadoop 2.0.4.RELEASE 和 hadoop-distcp.2.2.0.

这已在最近的 2.1 RC1 版本中得到解决,我们尚未考虑将其向后移植到 2.0.x 分支。如果您想尝试使用 2.1.0.RC1 版本,您需要在构建中包含 Spring IO 存储库 - 请参阅项目页面的快速启动部分 - http://projects.spring.io/spring-hadoop/