web-dev-qa-db-ja.com

リモートマシンからHDFSにファイルを配置するときにユーザー名を指定する方法

Hadoopクラスターがセットアップされており、共通のデフォルトユーザー名「user1」で作業しています。 hadoopクラスターの一部ではないリモートマシンからhadoopにファイルを配置したい。リモートマシンでhadoopファイルを構成し、

hadoop dfs -put file1 ...

リモートマシンから呼び出され、file1をHadoopクラスターに配置します。

唯一の問題は、リモートマシンに「user2」としてログインしているため、期待どおりの結果が得られないことです。実際、上記のコードは、次のようにリモートマシンでのみ実行できます。

hadoop dfs -put file1 /user/user2/testFolder

しかし、私が本当に欲しいのは、ファイルを次のように保存できるようにすることです。

hadoop dfs -put file1 /user/user1/testFolder

最後のコードを実行しようとすると、アクセス許可のためにhadoopがエラーをスローします。とにかくhadoop dfsコマンド内でユーザー名を指定できるのでしょうか?

私は次のようなものを探しています:

hadoop dfs -username user1 file1 /user/user1/testFolder

ありがとう

31
reza

デフォルトでは、Hadoopで認証と許可はオフになっています。 Hadoop-The Definitive Guide (ところで、ニースの本-それを購入することをお勧めします)

HadoopがHDFSの権限に使用するユーザーIDは、クライアントシステムでwhoamiコマンドを実行することにより決定されます。同様に、グループ名は実行中のグループの出力から導出されます。

したがって、必要なユーザー名を返す新しいwhoamiコマンドを作成し、適切にPATHに入れると、Linuxに付属する実際のwhoamiが見つかる前に、作成されたwhoamiが見つかります。同様に、groupsコマンドでも遊ぶことができます。

これはハッキングであり、認証と承認がオンになると機能しません。

11
Praveen Sripati

HADOOP_USER_NAME環境変数を使用すると、操作するユーザー名をHDFSに伝えることができます。これは、クラスターがセキュリティ機能(Kerberosなど)を使用していない場合にのみ機能することに注意してください。例えば:

HADOOP_USER_NAME=hdfs hadoop dfs -put ...
82

これは誰にとっても問題ではないかもしれませんが、私はこのために小さなハックを使用しています。

.bash_profileでHADOOP_USER_NAMEをエクスポートしているため、ログインするたびにユーザーが設定されます。

次のコード行を.bash_profileに追加するだけです。

export HADOOP_USER_NAME=<your hdfs user>
15
bioShark

Ssh経由のストリーミングを使用して回避策を提供できる、これに類似した別の投稿があります。

cat file.txt | ssh user1@clusternode "hadoop fs -put - /path/in/hdfs/file.txt"

詳細については、 ローカルファイルにコピーせずにリモートファイルをhadoopに入れる を参照してください。

0
Chris White