以下代码是我们生产系统的一部分。
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启动之间的结果不同?
非常感谢。
答案 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);