Ползание ореха застревает в ожидании вращения или активном. как уменьшить цикл выборки?

Я использую Nutch 2.1 и сканирую сайт. Проблема заключается в том, что сканер продолжает показывать выборку спин-ожидания / активности URL-адреса, и так как выборка занимает столько времени, что время подключения к mysql истекает. Как я могу уменьшить количество выборок за один раз, чтобы mysql не получал тайм-аут? Есть ли настройка в Nutch, где я могу сказать, только получить 100 или 500 URL-адресов, затем проанализировать и сохранить в MySQL, а затем снова получить следующие 100 или 500 URL-адресов?

Сообщение об ошибке:

Unexpected error for http://www.example.com
java.io.IOException: java.sql.BatchUpdateException: The last packet successfully received from the server was 36,928,172 milliseconds ago.  The last packet sent successfully to the server was 36,928,172 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
    at org.apache.gora.sql.store.SqlStore.flush(SqlStore.java:340)
    at org.apache.gora.mapreduce.GoraRecordWriter.write(GoraRecordWriter.java:65)
    at org.apache.hadoop.mapred.ReduceTask$NewTrackingRecordWriter.write(ReduceTask.java:587)
    at org.apache.hadoop.mapreduce.TaskInputOutputContext.write(TaskInputOutputContext.java:80)
    at org.apache.nutch.fetcher.FetcherReducer$FetcherThread.output(FetcherReducer.java:663)
    at org.apache.nutch.fetcher.FetcherReducer$FetcherThread.run(FetcherReducer.java:534)
Caused by: java.sql.BatchUpdateException: The last packet successfully received from the server was 36,928,172 milliseconds ago.  The last packet sent successfully to the server was 36,928,172 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
    at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2028)
    at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1451)
    at org.apache.gora.sql.store.SqlStore.flush(SqlStore.java:328)
    ... 5 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 36,928,172 milliseconds ago.  The last packet sent successfully to the server was 36,928,172 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
    at sun.reflect.GeneratedConstructorAccessor49.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3364)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1983)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427)
    at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1980)
    ... 7 more
Caused by: java.net.SocketException: Broken pipe
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
    at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3345)
    ... 13 more

1 ответ

Я использую Nutch 2.1 и сканирую сайт. Проблема состоит в том, что сканер продолжает показывать выборку спин-ожидания / активности URL-адреса, и так как выборка занимает столько времени, что время подключения к mysql истекает. Как я могу уменьшить количество выборок за один раз, чтобы mysql не получал тайм-аут?

Чтобы уменьшить количество выборок, вы можете добавить указанное ниже свойство в свой файл nutch-site.xml и отредактировать значение в соответствии с вашими потребностями. Пожалуйста, не редактируйте nutch-default.xml, а скопируйте свойство в nutch-site.xml и управляйте значением оттуда:

  <property>
    <name>fetcher.threads.fetch</name>
    <value>20</value>
  </property>

Что касается проблемы тайм-аута, вы можете добавить это свойство к вашему nutch-site.xml со значением времени загрузки, которое вы считаете необходимым.

<property>
  <name>http.timeout</name>
  <value>240000</value>
  <description>The default network timeout, in milliseconds.</description>
</property>

Есть ли настройка в Nutch, где я могу сказать, что нужно получить только 100 или 500 URL, затем проанализировать и сохранить в mysql, а затем снова получить следующие 100 или 500 URL?

Натч сканирует цикл с шагами - генерируйте /fetch/parse/update за несколько итераций, называемых "глубина", которые вы указываете в своей команде сканирования. Если вы хотите иметь контроль над сканированием, вы можете выполнить каждый шаг, как описано в разделе 3.2(Использование отдельных команд для сканирования по всему веб-сайту) учебной ссылки http://wiki.apache.org/nutch/NutchTutorial. Это даст вам хорошее направление и точно поймете, что происходит. Проверяйте статус при извлечении каждого сегмента, чтобы вы знали, сколько URL извлекается в каждом сегменте

Другие вопросы по тегам