Функция makeCluster в R snow висит бесконечно

Я использую makeCluster функция из пакета R snow с Linux-машины, чтобы запустить кластер SOCK на удаленной Linux-машине. Кажется, все решено для двух машин успешно общаться (я могу установить ssh-соединения между ними). Но:

makeCluster("192.168.128.24",type="SOCK")

не выдает никакого результата, просто зависает до бесконечности.

Что я делаю неправильно?

большое спасибо

1 ответ

Решение

К сожалению, есть много вещей, которые могут пойти не так при создании снежного (или параллельного) кластерного объекта, и наиболее распространенным способом отказа является зависание на неопределенный срок. Проблема в том, что makeSOCKcluster запускает рабочих кластера один за другим, и каждый рабочий (если он успешно запущен) должен установить сокетное соединение с ведущим, прежде чем мастер продолжит запуск следующего рабочего. Если кто-либо из рабочих не сможет подключиться к мастеру, makeSOCKcluster будет висеть без каких-либо сообщений об ошибках. Рабочий может выдать сообщение об ошибке, но по умолчанию любое сообщение об ошибке перенаправляется на /dev/null,

Помимо проблем с ssh, makeSOCKcluster может зависнуть, потому что:

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

и есть еще много возможностей.

Другими словами, никто не может диагностировать эту проблему без дополнительной информации, поэтому вам необходимо выполнить поиск и устранение неисправностей, чтобы получить эту информацию.

По моему опыту, единственным наиболее полезным методом устранения неполадок является ручной режим, который вы включаете, указывая manual=TRUE при создании объекта кластера. Это также хорошая идея, чтобы установить outfile="" так что сообщения об ошибках от рабочих не перенаправляются на /dev/null:

cl <- makeSOCKcluster("192.168.128.24", manual=TRUE, outfile="")

makeSOCKcluster отобразит команду Rscript для выполнения в терминале на указанном компьютере, а затем будет ожидать выполнения этой команды. Другими словами, makeSOCKcluster будет зависать до тех пор, пока вы вручную не запустите работника на хосте 192.168.128.24, в вашем случае. Помните, что это метод устранения неполадок, а не решение проблемы, и мы надеемся получить больше информации о том, почему рабочие не начинают, пытаясь запустить их вручную.

Очевидно, что использование ручного режима позволяет обойти любые проблемы с ssh (поскольку вы не используете ssh), поэтому, если вы можете успешно создать кластер SOCK в ручном режиме, то, вероятно, ssh - ваша проблема. Если команда Rscript не найдена, то либо R не установлен, либо установлен в другом месте. Но, надеюсь, вы получите сообщение об ошибке, которое приведет вас к решению.

Если makeSOCKcluster все еще просто зависает после того, как вы выполнили указанную команду Rscript на указанной машине, тогда у вас, вероятно, есть проблема с сетью или брандмауэром.

Дополнительные советы по устранению неполадок см. В моем ответе о создании кластера в doParallel / snowfall зависает.

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