Получение ошибок java.io.IOException при запуске скрипта R Scraper - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть этот пример R скрипт скребка (я не могу использовать настоящий веб-сайт):

#!/usr/bin/Rscript

library(RCurl)
library(httr)
library(rvest)
library(lubridate)
library(stringi)

new_files <- Map(function(ln, y, bn) {

  fun1 <- html_session(URLencode(
    paste0("https://example.com", ln)),
    config(ssl_verifypeer = FALSE))

  if(y == Sys.Date()) {writeBin(fun1$response$content, bn)}
    else ("He's dead, Jim")

  return(fun1$response$content)

}, links, dates, names)

Я запускаю этот скрипт в контейнере докера через Apache NiFi (ExecuteProcessorпроцессор).Но когда я запускаю его, я получаю эту ошибку:

Process execution failed due to java.io.IOException: Stream closed: java.io.IOException: Stream closed
     java.io.IOException: Stream closed 
  at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:170)
  at java.io.BufferedInputStream.read(BufferedInputStream.java:336)
  at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
  at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
  at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
  at java.io.FilterInputStream.read(FilterInputStream.java:107)
  at org.apache.nifi.processors.standard.ExecuteProcess$4.call(ExecuteProcess.java:367)
  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  at java.lang.Thread.run(Thread.java:748)

Я читал этот ответ о закрытии потоков , прежде чем они должны быть закрыты.Я понятия не имею, почему это приведет к закрытой ошибке исключения, когда скрипт отлично работает на моем локальном компьютере / в RStudio.

Он портится, как только выполняется в контейнере Docker.Что-то связанное с моим оператором if / else внутри функции Map?Я понятия не имею - или это как-то связано с загрузкой пакета lubridate.

1 Ответ

0 голосов
/ 03 марта 2019

Как уже упоминали несколько человек, вы пытаетесь сделать что-то сложное, что потребует устранения неполадок в нескольких областях.Я поделюсь некоторыми шагами, чтобы приблизиться к этому, но, пожалуйста, учтите следующее:

Вы используете довольно сложное решение для того, что может быть простой проблемой.Можете ли вы подумать о своей проблеме одним из следующих способов: «Я хочу почистить сайт» или «Я хочу запустить скрипт»?

В этом случае есть хорошие новости, NiFi может легко работать со скриптами, используяпроцессор ExecuteScript, в настоящее время он поддерживает следующие языки:

  • Clojure
  • ECMAScript
  • Groovy
  • lua
  • python
  • ruby ​​

Исходя из моих личных предпочтений, я бы выбрал python, вы легко найдете множество примеров, как чистить сайты.


В случае, если вышенедостаточно, пожалуйста, проверьте следующие шаги:

  1. Работает ли ваш скрипт?(Похоже, вы уже это проверили)
  2. Вы можете запустить тривиальный скрипт R из NiFi?(например, что-то, что делает 1 + 1 без необходимых библиотек)
  3. Можете ли вы запустить любой R-скрипт из вашего док-контейнера без NiFi?
  4. У вас есть возможность запустить этот конкретный R-скрипт из вашегоДок-контейнер без NiFi?
  5. Сможете ли вы вообще что-либо сделать с ExecuteProcessor?Например, простой ls
  6. Можете ли вы вообще что-либо сделать с ExecuteProcessor в этом контейнере Docker?Например, простой ls

Было бы слишком много, чтобы погрузиться во все возможности, но проверьте и, надеюсь, ответ ясен, или, по крайней мере, устранение неполадок может быть более сфокусированным.

...