2016-07-15 15 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とは何ですか?なぜ、手動運転と就寝運転の結果が異なるのですか?

ありがとうございました。

答えて

0

"Pepperdata Supervisorは、Resource Manager(またはJobTracker)ノード上で動作し、クラスタ内のすべてのデータノードで実行されるエージェントと通信します。使用しているとき

com.pepperdata.supervisor.agent.resource.DistributedFileSystemWrapperClassic
は が

ので
org.apache.hadoop.fs.FileSystemを拡張
org.apache.hadoop.fs.FilterFileSystem
を拡張します返されたfsをサブクラスとしてテストしたり、org.apache.hadoop.fs.DistributedFileSystemの手動型キャストを行うべきではありません。代わりに、返されたfsを直接org.apache.hadoop.fs.FileSystemとして使用する必要があります。例えば。

FileSystem fs = FileSystem.get(ConfigurationFactory.newInstance().getConfiguration()); 
fs.exists(inputPath); 
関連する問題