1

Вопрос по jsch, remote-server, remote-access, rhadoop, r – Не удалось удаленно выполнить скрипт R, который загружает библиотеку «rhdfs»

Я работаю над проектом, используя R-Hadoop, и получил эту проблему.

Я использую JSch в JAVA для ssh для удаленного псевдокластера hadoop, и вот часть кода Java для создания соединения.

/* Create a connection instance */
Connection conn = new Connection(hostname);
/* Now connect */
conn.connect();
/* Authenticate */
boolean isAuthenticated = conn.authenticateWithPassword(username, password);
if (isAuthenticated == false)
throw new IOException("Authentication failed.");
/* Create a session */
Session sess = conn.openSession();
//sess.execCommand("uname -a && date && uptime && who");
sess.execCommand("Rscript -e 'args1 

@HongOoi R-скрипт автоматически запускается в фоновом режиме на удаленном сервере, что означает, что пользовательский интерфейс командной строки на удаленном сервере остается неизменным, поэтому я могудаже не знаю, что именно произошло на удаленном сервере. Даже если я добавлю кошку ("блаб») к сценарию R, яЯ не получу никакой печатной информации на удаленном сервере. Поэтому я использовал хитрый метод, генерируя текстовые файлы с именем вроде "Внутри ххх функция " чтобы увидеть, как далеко заходит сценарий, который оказывается остановленным каждый раз, когда он пытается выполнить "библиотека("без разницы")"

от Hao Huang

@HongOoi Спасибо за ваш совет! Проверьте мой вопрос обновления, он показывает больше информации. Но я'я так новичок в Linux, и я действительно нене знаю, как справляться с проблемами, связанными с вещами пространства имен.

от Hao Huang

Ты можешь использоватьsink перенаправить вывод в файл. Это может помочь вам диагностировать чтопродолжается

от Hong Ooi

Какие сообщения об ошибках вы получаете с RHadoop? Это ошибки Java или R?

от Hong Ooi
2 ответа
2

Ну, я решил эту проблему так:sess.execCommand("source /etc/profile

Ну, я решил эту проблему так:

sess.execCommand("source /etc/profile; R CMD BATCH --no-save --no-restore '--args args1=\"Dell\" args2=1' /usr/local/R/mytest.R /usr/local/R/whathappened.txt");

Проблема была вызвана окружающей средой. SSH к удаленному кластеру Hadoop на самом деле использует другую среду, поэтому такие переменные, как $ HADOOP_CMD, не будут обнаружены. Есть несколько способов сообщить сеансу SSH, как выбирать переменные среды.

В моем методе"source /etc/profile" может сказать среде sshed, где найти среду обитания.

2

Ну, я просто нашел другое решение сам:

Вместо того, чтобы заботиться о env вне кластера Hadoop, можно установить env в R-сценариях, например:

Sys.setenv(HADOOP_HOME="put your HADOOP_HOME path here")
Sys.setenv(HADOOP_CMD="put your HADOOP_CMD path here")

library(rmr2)
library(rhdfs)

Похожие вопросы