Функция 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 зависает.