以下代码是我们生产系统的一部分。
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/