Я пытаюсь выполнить файл jar для выполнения простого запроса в моей базе данных HBase с PHP-сервера, поэтому я могу распечатать результаты на веб-странице.
PHP Server настроен с тем же именем пользователя, что и пользователь hadoop, и с той же группой.
Команда PHP exec:
exec("bash /usr/local/hadoop/bin/hadoop jar myjar.jar my.package.MyClass 2> php_error.log", $result);
Я получаю это исключение, когда пытаюсь выполнить команду (в php_error.log):
Exception in thread "main" java.io.IOException: Permission denied at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createTempFile(File.java:1879) at org.apache.hadoop.util.RunJar.main(RunJar.java:115)
Я знаю, что это связано с разрешениями, но даже с 777 на моем HDFS, а также в папках установки приложений, это не работает.
Есть идеи? Спасибо.
Кроме того, где этот временный файл хочет быть создан? Hadoop dir? HDFS? Где?
Редактировать: запускать это локально, он отлично работает! нет ошибок разрешения! hadoop jar myjar.jar my.package.MyClass
Ваш PHP в порядке. Проблема в том, что команда, которую вы запускаете, пытается скопировать файл в файл hadoop.tmp.dir. По умолчанию это местоположение /tmp/hadoop-${user.name}
. Вы также должны предоставить разрешения для этой папки, или полный /tmp/hadoop
каталог рекурсивно
Редактировать:
Выяснилось, что apache не является допустимым пользователем в этом случае. Решение состоит в том, чтобы создать нового пользователя, добавить его в группу hadoop, установить разрешения на jar и hasoop.tmp.dir и изменить владельца веб-страницы на созданного пользователя