1

PHP サーバーから HBase データベースに対して単純なクエリを実行するために jar ファイルを実行しようとしているので、結果を Web ページに出力できます。

PHP サーバーは、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)

アクセス許可に関連していることは知っていますが、HDFS と Hadoop インストール フォルダーで 777 を使用しても機能しません。

何か案は?ありがとうございました。

また、この一時ファイルをどこに作成したいですか? Hadoop ディレクトリ? hdfs? どこ?

編集:これをローカルで実行すると、完全に機能します! 許可エラーはありません! Hadoop jar myjar.jar my.package.MyClass

4

1 に答える 1

1

あなたのPHPは大丈夫です。問題は、実行中のコマンドがファイルを hadoop.tmp.dir にコピーしようとしていることです。デフォルトの場所は です/tmp/hadoop-${user.name}そのフォルダーにもアクセス許可を与えるか、/tmp/hadoopディレクトリ全体に再帰的に許可する必要があります

編集:

その場合、apache は有効なユーザーではないことがわかりました。解決策は、新しいユーザーを作成し、hadoop グループに追加し、jar と hadoop.tmp.dir に権限を設定し、Web ページの所有者を作成したユーザーに変更することです。

于 2013-02-06T21:37:56.080 に答える