2012-02-14 10 views
4

マップ機能は、すべての入力ファイルを読み込む必要があります。そのファイルはまったく変更されません。読み取り専用です。分散キャッシュは私の考えを大きく助けてくれるかもしれませんが、それを使う方法は見つけられません。私がオーバーライドする必要があるpublic void configure(JobConf conf)関数は廃止予定です。さて、JobConfは推奨されていません。すべてのDistributedCacheチュートリアルでは、非推奨の方法を使用しています。私に何ができる?私は上書きすることができる別の構成機能はありますか?すべてのマップタスク用のHadoopキャッシュファイル

 Configuration conf = new Configuration();   //load the MFile 
    FileSystem fs = FileSystem.get(conf); 
    Path inFile = new Path("planet/MFile");  
    FSDataInputStream in = fs.open(inFile); 
    DecisionTree dtree=new DecisionTree().loadTree(in); 

私はMFILE私のマップ機能は、それを上に見てする必要があり、何度も何度

ないように

答えて

1

Jobconfがあったことをキャッシュしたい:

これらは私のマップ機能の非常に最初の行です0.20. xで非推奨ですが、1.0.0では使用できません。 (これを書いているような):-)

あなたの質問に、マップを実行するには2つの方法がありますJavaでの仕事を減らす、(1はorg.apache.hadoop.mapreduceパッケージ(extending)クラスを使用することですし、他はorg.apache.hadoop.mapredパッケージにimplementingクラスでありますまたは他の方法で)。

どちらを使用しているか不明な場合は、configureオーバーライドする方法がない場合、オーバーライドする方法がsetupになります。

@Override 
protected void setup(Context context) throws IOException, InterruptedException 

これはconfigureとよく似ています。

org.apache.hadoop.mapreduceパッケージ内のときにextend Mapper classあなたはoverridesetup方法を取得します。

+0

私は今これを試し、結果を教えてくれます。ありがとう:) – jojoba

5

さて、私はそれをやったと思います。私はラヴィBhattさんのヒントに続いて、私は、この書いた:私はこれで私は必要なファイルを取得することができる午前

DistributedCache.addCacheFile(new URI(args[0]+"/"+"MFile"), conf); 
    Job job = new Job(conf, "MR phase one"); 

:私はキャッシュにそれを追加し、これを行う私のメインメソッド内

@Override 
    protected void setup(Context context) throws IOException, InterruptedException 
    {  
     FileSystem fs = FileSystem.get(context.getConfiguration()); 
     URI files[]=DistributedCache.getCacheFiles(context.getConfiguration()); 
     Path path = new Path(files[0].toString()); 
     in = fs.open(path); 
     dtree=new DecisionTree().loadTree(in);     
    } 

をしかし、それが100%動作するかどうかはまだ分かりません。それをテストする方法はありますか?ありがとう。

+0

私はそれを取り戻す。それは確かに動作します。それは悪魔のように動く。また、私は持っていたあまりにも多くのファイルを開いている問題はありません..Hooooraayy – jojoba

関連する問題