Java WebアプリケーションからリモートHadoopクラスターにMapReduceジョブを送信したいのですが、ジョブを送信するユーザーを指定できません。すべてのMapReduceジョブに使用する必要があるシステムユーザーを構成して使用したいと思います。
現在、クライアントシステムの現在ログインしているユーザーのユーザー名でhadoopジョブを実行しても、ユーザーを指定できません。これにより、メッセージでエラーが発生します
Permission denied: user=alice, access=WRITE, inode="staging":hduser:supergroup:rwxr-xr-x
...ここで、「alice」は、クライアントマシンにログインしているローカルユーザーです。
私が試してみました
UserGroupInformation
インスタンスの作成(プロキシと通常のユーザーの両方)とのさまざまな組み合わせ- Java Systemプロパティをで設定し、 envarを
-Duser.name=hduser
変更し、ハードコードされた呼び出しとして使用します。USER
System.setProperty("user.name", "hduser")
... 無駄に。1)これらのクラスがどのように使用されるのかについての手がかりがないことを認めます。また、Java Systemプロパティを変更することは、明らかにWebアプリケーションで使用するための実際のソリューションではないことに注意してください。
Hadoopがリモートシステムへの接続に使用するユーザーを指定する方法を知っている人はいますか?
PS / Hadoopはデフォルト構成を使用しています。つまり、クラスターへの接続時に認証は使用されず、リモートマシンとの通信にはKerberosは使用されません。