33

私は 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
4

5 に答える 5

90

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

HADOOP_USER_NAME=hdfs hadoop dfs -put ...
于 2013-10-01T20:06:29.877 に答える
13

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

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

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

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

于 2012-07-07T01:30:54.730 に答える
0

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

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

詳細については、リモート ファイルをローカル ディスクにコピーせずに Hadoop に配置するを参照してください。

于 2012-07-07T16:42:22.803 に答える