2016-07-15 70 views
0

以下代碼片段是我們生產系統的一部分。爲什麼FileSystem.get()返回com.pepperdata.supervisor.agent.resource.DistributedFileSystemWrapperClassic

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部分未執行。並且返回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-mapreduce/lib /PepperdataSupervisor.jar。和/opt/pepperdata/lib/PepperdataSupervisor.jar

我是java生態系統的新手。什麼是com.pepperdata.supervisor.agent.resource.DistributedFileSystemWrapperClassic?爲什麼手動運行和oozie啓動的結果不同?

非常感謝。

回答

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