我正在寻找在S3和hdfs之间传输文件的有效方法。在我的项目中,ozzie作业是kickedoff,它处理文件,创建tmp文件,然后进入关键部分,作业必须获得动物园管理员锁,然后执行一些操作。它在获取锁后执行的操作之一是将文件从hdfs移动到S3。由于动物园管理员锁在适当的位置,我们有很少的作业不能获得动物园管理员锁,因为超时。为了确保没有作业因为超时问题而失败,我正在努力提高文件传输的效率。我也不能消除动物园管理员的锁。我用的是InterProcessMutex锁。
我试过几种方法。
方法1: -我尝试使用apache使用下面的更改,该项目不使用maven错误构建。
final String[] args = new String[4];
args[0] = "-overwrite";
args[1] = "-pb";
args[2] = source.toString();
args[3] = destination.toString();
LOGGER.info("Copying contents");
DistCp distCp = null;
try {
DistCpOptions distCpOptions = new DistCpOptions.Builder(source, destination)
.withSyncFolder(true)
.withCRC(true)
.withOverwrite(true)
.build();
distCp = new DistCp(configuration, distCpOptions);
} catch (final Exception e) {
throw new IOException("An Exception occured while creating a distCp object", e);
}
LOGGER.info("Copying contents of source path {} to destination path {} ", source, destination);
final int distCopyExitCode = distCp.run(args);错误:为了纠正这个错误,我看到了添加番石榴-11.0.2 maven依赖项的建议,但没有解决这个问题。有什么办法解决这个问题吗?
java.lang.NoClassDefFoundError: org/apache/hadoop/thirdparty/com/google/common/base/Preconditions
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.hadoop.tools.DistCpOptions$Builder.<init>(DistCpOptions.java:530)方法2: I遇到了aws S3Distcp工具,它在hdfs和S3之间传输文件,但是我没有找到S3Distcp java。使用S3Distcp的一种方法是在EMR集群中创建一个步骤,从而从EMR开始。(https://docs.aws.amazon.com/code-samples/latest/catalog/java-emr-emr-add-steps.java.html) 。
在我的场景中,我有一个EMR步骤,它实际上启动了作业,作业将处理输入文件,然后将文件从hdfs移动到S3,然后终止。
如果我使用上述链接中提供的解决方案,下面的步骤将是操作的顺序。
kicks-off
>H 122作业完成<代码>H 223G 224
如果我使用这种方法-有多个并行作业被启动,每个作业将有一个新的EMR步骤将被创建。如果我搞错了就纠正我。有谁能就如何解决这个问题提出建议吗?
发布于 2022-06-04 21:45:20
java.lang.NoClassDefFoundError: org/apache/hadoop/thirdparty/com/google/common/base/Preconditions这显示了缺少hadoop-第三方依赖关系。添加这个应该可以解决这个错误。
<dependency>
<groupId>org.apache.hadoop.thirdparty</groupId>
<artifactId>hadoop-shaded-guava</artifactId>
<version>${hadoop-thirdparty-guava.version}</version>
</dependency>您可以根据hadoop版本为此依赖项选择相应的版本,最近的版本为1.1.1,hadoop版本为3.3.3。
https://stackoverflow.com/questions/72502740
复制相似问题