为什么FileSystem.get()返回com.pepperdata.supervisor.agent.resource.DistributedFileSystemWrapperClassic

时间:2016-07-15 14:16:31

标签: java hadoop oozie

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

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运行上面的代码mannualy,提供与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-映射精简/ LIB / PepperdataSupervisor.jar。和/opt/pepperdata/lib/PepperdataSupervisor.jar

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

非常感谢。

1 个答案:

答案 0 :(得分:0)

" 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);