2017-10-29 2 views
-1

Javaで書かれたSparkジョブから、特定のhdfsファイルにアクセスできるすべてのlinux/centosユーザのリストを取得しようとしています。
すべてのポインタが役立ちます。 現在、情報を取得するためにJavaコードの下にトーリングされていますが、機能していません。 result = Shell.execCommand( "sudo"、 "bash"、 " - c"、 "lid"、 "-g"、 "-n"、fileOwnersGroup);Spark-Javaを使用してhdfsファイルにアクセスできるユーザのリストを取得する

それは sudoを投げている:何のtty存在していないaskpassパッケージプログラムは、更新の/ etc/sudoerが、運など、さまざまなオプションを試してみました

を指定されていません。

+1

スタックオーバーフローはプログラミングと開発の質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[スーパーユーザ](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。 – jww

+0

"シェルスクリプト内"または "自分のプログラム内"を追加するだけでは、通常、質問をプログラミングや開発の質問にするには不十分です。あなたのJavaコードを表示し、問題のある場所を説明してください。 – jww

+0

HDFSはPOSIXファイルシステムではありません。あなたのHDFSの「ユーザーアカウント」は(通常は)Linuxユーザーにはマッピングされていません。 **特に**ケルベロスを使用していない場合 –

答えて

0

FileStatusオブジェクトは、getOwner()getGroup()のメソッドを持っています。

ファイルにFileSystemオブジェクトとPathというステータスを取得できます。例えば

Spark Scala list folders in directory

ただし、Unixがグループにマップを占めるものを見つけるためにいくつかの外部のクエリが必要になります。例えば、そのような操作は、通常、LDAP検索によって制御される。

それはsudoを投げている:何のtty存在していないaskpassパッケージプログラムが

を指定していない明らかな問題は、sudoがパスワードとスパークプロセスのプロンプトを表示されることに高架のコマンドを実行することはできないということですローカルファイルシステム

+0

同じものを使ってオーナーとグループを取得しますが、グループを取得したら、そのグループに属するすべてのユーザーのリストを取得したかったのです。 java from私は以下のコマンドを使用しています 結果= Shell.execCommand( "sudo"、 "bash"、 " - c"、 "lid"、 "-g"、 "-n"、fileOwnersGroup); しかし、うまくいきません。 –

+0

アカウント情報を読むために 'sudo bash -c'は必要ありません。また、スパークアプリケーションは、とにかく昇格した特権では実行できないはずです。 Sparkは分散実行フレームワークであり、実行プログラムが実行されているサーバーを制御することはできません。ユーザ/グループマッピングはHadoopプロジェクトの対象外です。前述のとおり、グループ管理は一般にLDAPによって制御されます。そしてLDAPをUNIXアカウントに同期させるには、sssdを使用する。 –

+0

どんな場合でも 'getent group $ {group}'はあなたが望むコマンドだと私は信じている –

関連する問題