溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

運行nutch報錯unzipBestEffort returned null怎么辦

發(fā)布時間:2022-01-14 18:26:03 來源:億速云 閱讀:136 作者:柒染 欄目:云計算

小編今天帶大家了解運行nutch報錯unzipBestEffort returned null怎么辦,文中知識點介紹的非常詳細。覺得有幫助的朋友可以跟著小編一起瀏覽文章的內容,希望能夠幫助更多想解決這個問題的朋友找到問題的答案,下面跟著小編一起深入學習“運行nutch報錯unzipBestEffort returned null怎么辦”的知識吧。

報錯信息:fetch of http://szs.mof.gov.cn/zhengwuxinxi/zhengcefabu/201402/t20140224_1046354.html failed with: java.io.IOException: unzipBestEffort returned null

完整的報錯信息為:

2014-03-12 16:48:38,031 ERROR http.Http - Failed to get protocol output
java.io.IOException: unzipBestEffort returned null
at org.apache.nutch.protocol.http.api.HttpBase.processGzipEncoded(HttpBase.java:317)
at org.apache.nutch.protocol.http.HttpResponse.<init>(HttpResponse.java:164)
at org.apache.nutch.protocol.http.Http.getResponse(Http.java:64)
at org.apache.nutch.protocol.http.api.HttpBase.getProtocolOutput(HttpBase.java:140)
at org.apache.nutch.fetcher.Fetcher$FetcherThread.run(Fetcher.java:703)
2014-03-12 16:48:38,031 INFO  fetcher.Fetcher - fetch of http://szs.mof.gov.cn/zhengwuxinxi/zhengcefabu/201402/t20140224_1046354.html failed with: java.io.IOException: unzipBestEffort returned null
2014-03-12 16:48:38,031 INFO  fetcher.Fetcher - -finishing thread FetcherThread, activeThreads=0

由此可知拋出異常的代碼位于src/plugin/lib-http/src/java/org/apache/nutch/protocol/http/api/HttpBase.java(lib-http插件)類的processGzipEncoded方法的317行:

byte[] content;
if (getMaxContent() >= 0) {
  content = GZIPUtils.unzipBestEffort(compressed, getMaxContent());
} else {
  content = GZIPUtils.unzipBestEffort(compressed);
}

if (content == null)
  throw new IOException("unzipBestEffort returned null");

nutch2.7\src\plugin\protocol-http\src\java\org\apache\nutch\protocol\http\HttpResponse.java(protocol-http插件)的164行調用了processGzipEncoded方法: 

readPlainContent(in);

String contentEncoding = getHeader(Response.CONTENT_ENCODING);
if ("gzip".equals(contentEncoding) || "x-gzip".equals(contentEncoding)) {
	content = http.processGzipEncoded(content, url);
} else if ("deflate".equals(contentEncoding)) {
	content = http.processDeflateEncoded(content, url);
} else {
	if (Http.LOG.isTraceEnabled()) {
		Http.LOG.trace("fetched " + content.length + " bytes from " + url);
	}
}

通過Firefox的Firebug工具可查看該URL的響應頭為Content-Encoding:gzip,Transfer-Encoding:chunked。

解決方法如下:

1、修改文件nutch2.7\src\java\org\apache\nutch\metadata\HttpHeaders.java,增加一個field:

public final static String TRANSFER_ENCODING = "Transfer-Encoding";

 
2、修改文件nutch2.7\src\plugin\protocol-http\src\java\org\apache\nutch\protocol\http\HttpResponse.java,替換第160行代碼readPlainContent(in);為如下代碼

String transferEncoding = getHeader(Response.TRANSFER_ENCODING); 
if(transferEncoding != null && "chunked".equalsIgnoreCase(transferEncoding.trim())){    	  
  readChunkedContent(in, line);  
}else{
  readPlainContent(in);  
}

3、http內容長度限制不能使用負值,只能使用一個大整數(shù):

<property>
	<name>http.content.limit</name>
	<value>655360000</value>
</property>

 
4、因為修改了核心代碼和插件代碼,所以需要重新編譯打包發(fā)布,執(zhí)行nutch2.7\build.xml的默認target:runtime  

cd nutch2.7
ant

感謝大家的閱讀,以上就是“運行nutch報錯unzipBestEffort returned null怎么辦”的全部內容了,學會的朋友趕緊操作起來吧。相信億速云小編一定會給大家?guī)砀鼉?yōu)質的文章。謝謝大家對億速云網(wǎng)站的支持!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI