2016-01-22 2 views
0

Я использую Nutch 2.1 при сканировании всего домена (company.com, например). Я когда-то сталкивался с этой проблемой, когда я не получаю все ссылки, которые я хочу просканировать из-за ограничения содержания, установленного в Apache Nutch. Обычно, когда я проверяю содержимое, в базе данных хранится только верхняя половина страницы, поэтому ссылки на нижней половине не были извлечены.Советы по использованию ограничения содержания Nutch

Для того, чтобы решить эту проблему, я изменил Nutch-site.xml так, что предельное содержание выглядит следующим образом:

<property> 
    <name>http.content.limit</name> 
    <value>-1</value> 
    <description>The length limit for downloaded content using the http 
    protocol, in bytes. If this value is nonnegative (>=0), content longer 
    than it will be truncated; otherwise, no truncation at all. Do not 
    confuse this setting with the file.content.limit setting. 
    </description> 
</property> 

Doing что решил проблему, но в какой-то момент, я встречая OutOfMemory ошибка, о чем свидетельствует этот вывод на разборе:

ParserJob: starting 
ParserJob: resuming: false 
ParserJob: forced reparse: false 
ParserJob: parsing all 
Exception in thread "main" java.lang.RuntimeException: job failed: name=parse, jobid=job_local_0001 
at org.apache.nutch.util.NutchJob.waitForCompletion(NutchJob.java:54) 
at org.apache.nutch.parse.ParserJob.run(ParserJob.java:251) 
at org.apache.nutch.parse.ParserJob.parse(ParserJob.java:259) 
at org.apache.nutch.parse.ParserJob.run(ParserJob.java:302) 
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65) 
at org.apache.nutch.parse.ParserJob.main(ParserJob.java:306) 

Вот мой hadoop.log (часть вблизи ошибки) :

2016-01-22 02:02:35,898 INFO crawl.SignatureFactory - Using Signature impl: org.apache.nutch.crawl.MD5Signature 
2016-01-22 02:02:37,255 WARN util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
2016-01-22 02:02:39,130 INFO mapreduce.GoraRecordReader - gora.buffer.read.limit = 10000 
2016-01-22 02:02:39,255 INFO mapreduce.GoraRecordWriter - gora.buffer.write.limit = 10000 
2016-01-22 02:02:39,322 INFO crawl.SignatureFactory - Using Signature impl: org.apache.nutch.crawl.MD5Signature 
2016-01-22 02:02:53,018 WARN mapred.FileOutputCommitter - Output path is null in cleanup 
2016-01-22 02:02:53,031 WARN mapred.LocalJobRunner - job_local_0001 
java.lang.OutOfMemoryError: Java heap space 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3051) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2991) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3532) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:943) 
    at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1441) 
    at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2936) 
    at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:477) 
    at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2631) 
    at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1800) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2221) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127) 
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2293) 
    at org.apache.gora.sql.store.SqlStore.execute(SqlStore.java:423) 
    at org.apache.gora.query.impl.QueryBase.execute(QueryBase.java:71) 
    at org.apache.gora.mapreduce.GoraRecordReader.executeQuery(GoraRecordReader.java:66) 
    at org.apache.gora.mapreduce.GoraRecordReader.nextKeyValue(GoraRecordReader.java:102) 
    at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:532) 
    at org.apache.hadoop.mapreduce.MapContext.nextKeyValue(MapContext.java:67) 
    at org.apache.hadoop.map 

Я столкнулся с этой проблемой, когда задал лимит содержимого -1. Однако, если я этого не сделаю, есть шанс, что я не получу все мои ссылки, которые я хотел бы просканировать. Любые советы по использованию лимита контента? Делает это не очень целесообразно? Если да, то какие возможные альтернативы я мог бы использовать? Благодаря!

+0

почему вы не увеличить объем памяти и посмотреть, как он будет работать? – ameertawfik

+0

Есть ли способ запустить Nutch с увеличенной памятью? – dagitab

ответ

0

Проблема заключается в том, что вы устанавливаете глубину сканирования неограниченно (-1). Когда ваша система искателя попадает на тяжелые URL-адреса, такие как https://en.wikipedia.org, https://wikipedia.org and https://en.wikibooks.org, в процессе обхода вашей системы может закончиться память. Вы должны увеличить память для Nuch, установив значение переменной окружения NUTCH_HEAPSIZE e.g., export NUTCH_HEAPSIZE=4000 (см. Подробности в сценарии Nutch). Обратите внимание, что это значение эквивалентно HADOOP_HEAPSIZE Hadoop. Если он все еще не работает, вы должны увеличить физическую память в системе^^

Надежда это помогает,

Ле Куок Do

Смежные вопросы