2016-04-02 1 views
3

私は、hbaseテーブルに格納されている多数のテキストの感情を見つけるために、MapRduceプログラムでCoreNLPプロジェクトを使用しようとしています。 SRパーザを解析に使用しています。モデルファイルはhdfsの/user/root/englishSR.ser.gzに格納されています。私はedu.stanford.nlp.io.RuntimeIOException: java.io.StreamCorruptedException: invalid stream headerを取得していますマッパーSRパーサーファイルをマッパーのhdfsにロードするにはどうすればよいですか?

props.setProperty("parse.model", "./model"); 

に今のMapReduceアプリケーションコード

job.addCacheFile(new URI("/user/root/englishSR.ser.gz#model")); 

で以下の行を追加しています。私はresourcesにファイルを追加し、すべてがGC overhead limit exceededまたはJavaヒープの問題が生じてmavenに追加しようとしている

<dependency> 
     <groupId>edu.stanford.nlp</groupId> 
     <artifactId>stanford-corenlp</artifactId> 
     <version>3.4.1</version> 
</dependency> 
<dependency> 
    <groupId>edu.stanford.nlp</groupId> 
    <artifactId>stanford-corenlp</artifactId> 
    <version>3.4.1</version> 
    <classifier>models</classifier> 
</dependency> 

pom.xmlファイルが含まれています。

答えて

1

私はhadoopもよくわかりませんが、あなたはSRパーサーモデルの圧縮についてCoreNLPを混乱させると思います。

まずHadoopのを使用せずにこれを試してください:それはパーサの罰金をロードする場合

java -mx4g edu.stanford.nlp.parser.shiftreduce.ShiftReduceParser -serializedPath /user/root/englishSR.ser.gz 

を参照してください。もしそうなら、それは以下のようなものを出力し、終了しなければなりません(そうしないと、例外がスローされます)。

Loading parser from serialized file edu/stanford/nlp/models/srparser/englishSR.ser.gz ... done [10.4 sec]. 

この場合、パーサーが正常に読み込まれた場合、モデルファイルに問題はありません。ないロードするように言ったと

props.setProperty("parse.model", "./model"); 

:私はこの問題は、ファイルまたはリソース名は、それはgzipで圧縮されているかどうかを決定する「が.gz」で終わるかどうかCoreNLPは、単に使用していること、その後だと思うし、それは間違って行を解釈します-gzippedモデル。だから私は、1つまたは以下の他がうまくいくことを望んでいるだろう:

cd /user/root ; gunzip englishSR.ser.gz 

job.addCacheFile(new URI("/user/root/englishSR.ser#model")); 

props.setProperty("parse.model", "./model"); 

または:あなたが示唆したよう

job.addCacheFile(new URI("/user/root/englishSR.ser#model.gz")); 

props.setProperty("parse.model", "./model.gz"); 
+0

を私は、コードを変更しました。私はパーサーファイルの読み込みが成功したと思います。 '無効なストリームヘッダ'エラーは表示されなくなりました。しかし、やはり私は 'GCオーバーヘッド限界を超えました.'と' Java Heap space'を発行しています。私が既に質問したように、パーサーファイルを 'resources'、' maven'、そして 'hdfs'に追加しようとしました。それぞれ同じエラーで失敗しました。私は 'mapreduce.map.memory.mb'を' 4096'に、 'mapred.child.java.opts'を' -Xmx4096m'に設定してメモリを増やそうとしました。 – joseph

+0

エラーメッセージは、マッパーが十分なメモリを確保していないことを意味しますが、修正する方法を言うにはHadoopの専門家をもっと探す必要があります。しかし、ちょうど確認して、私はあなたのリストが "coref"を含んでいないことを願っています。(今のデフォルトの)統計コアは簡単に4GB以上を必要とします。 –

+0

アノテーターリストに 'coref'が含まれていません。 – joseph

関連する問題