我试图在mapreduce程序中使用corenlp项目来查找存储在其中的大量文本的情感 hbase
table。我正在使用sr解析器进行解析。模型文件存储在 /user/root/englishSR.ser.gz
. 我在mapreduce应用程序代码中添加了下面的一行
job.addCacheFile(new URI("/user/root/englishSR.ser.gz#model"));
现在在Map上
props.setProperty("parse.model", "./model");
我要走了 edu.stanford.nlp.io.RuntimeIOException: java.io.StreamCorruptedException: invalid stream header
. 这个 pom.xml
文件包含
<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>
我已尝试将文件添加到 resources
再加上 maven
所有这些都导致了 GC overhead limit exceeded
或者java堆问题。
1条答案
按热度按时间s1ag04yj1#
我对hadoop不太了解,但我怀疑您混淆了corenlp对sr解析器模型的压缩。
首先不使用hadoop尝试以下操作:
看看这是否可以加载解析器。如果是这样,它应该打印如下内容并退出(否则,它将抛出异常…)。
如果这可以很好地加载解析器,那么模型文件没有问题。我认为问题是corenlp只是使用文件名或资源名是否以“.gz”结尾来决定它是否是gzip,因此它错误地解释了以下行:
就像说加载一个没有gzip的模型。所以我希望下面的一个或另一个能起作用:
或: