以下代码是我们生产系统的一部分。

import com.turn.util.hadoop.ConfigurationFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;

FileSystem fs = FileSystem.get(ConfigurationFactory.newInstance().getConfiguration());
if (fs instanceof DistributedFileSystem) { ACTION }

当oozie发起工作时。代码的ACTION部分未执行。 fs.getClass().getCanonicalName()返回com.pepperdata.supervisor.agent.resource.DistributedFileSystemWrapperClassic

我试图通过bin / java手动运行以上代码,提供与从oozie syslog获得的相同的类路径和java属性。结果是org.apache.hadoop.hdfs.DistributedFileSystem

我正在使用hadoop-common-2.0.0-cdh4.7.1.jar并且类路径有
CDH-4.7.1-1.cdh4.7.1.p0.47 / lib / hadoop-0.20-mapreduce / lib / PepperdataSupervisor.jar。和/opt/pepperdata/lib/PepperdataSupervisor.jar

我是Java生态系统的新手。什么是com.pepperdata.supervisor.agent.resource.DistributedFileSystemWrapperClassic?为什么手动运行和oozie启动之间的结果不同?

非常感谢你。

最佳答案

“Pepperdata Supervisor在资源管理器(或JobTracker)节点上运行,并与在群集中每个数据节点上运行的代理进行通信。”

com.pepperdata.supervisor.agent.resource.DistributedFileSystemWrapperClassic
延伸
org.apache.hadoop.fs.FilterFileSystem
延伸
org.apache.hadoop.fs.FileSystem

因此,在使用Pepperdata时,我们不应该将返回的fs作为子类进行测试,也不要对org.apache.hadoop.fs.DistributedFileSystem进行手动类型转换。相反,我们应该将返回的fs直接用作org.apache.hadoop.fs.FileSystem。例如。

FileSystem fs = FileSystem.get(ConfigurationFactory.newInstance().getConfiguration());
fs.exists(inputPath);

关于java - 为什么FileSystem.get()返回com.pepperdata.supervisor.agent.resource.DistributedFileSystemWrapperClassic,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38398385/

10-11 17:17