web-dev-qa-db-ja.com

hdfsで許可が拒否されました

Hadoop分散ファイルシステムは初めてで、マシンにhadoopシングルノードを完全にインストールしました。その後、hdfsにデータをアップロードしようとすると、エラーメッセージPermission Denied

コマンドを使用した端末からのメッセージ:

hduser@ubuntu:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input
put: /usr/local/input-data (Permission denied)

hduser@ubuntu:/usr/local/hadoop$ 

Sudoを使用してhduserをsudouserに追加した後:

hduser@ubuntu:/usr/local/hadoop$ Sudo bin/hadoop fs -put /usr/local/input-data/ /inwe
put: org.Apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x

hduser@ubuntu:/usr/local/hadoop$ 
38

Dfsパーミッションを無効にすることでこの問題を一時的に解決しました。以下のプロパティコードをconf/hdfs-site.xmlに追加することで

<property>
  <name>dfs.permissions</name>
  <value>false</value>
</property>
62

私は同様の状況にありましたが、ここで私のアプローチは多少異なります:

 HADOOP_USER_NAME=hdfs hdfs dfs -put /root/MyHadoop/file1.txt /

実際に行うことは、ローカルアクセス許可に従ってローカルファイルを読み取ることですが、HDFSにファイルを配置するときは、ユーザーhdfsのように認証されます。他のIDを使用してこれを行うことができます(実際の認証スキームの構成に注意してください。ただし、通常はそうではありません)。

利点:

  1. 権限はHDFSに保持されます。
  2. Sudoは必要ありません。
  3. 実際には、適切なローカルユーザー「hdfs」はまったく必要ありません。
  4. 以前のポイントのため、何かをコピーしたり権限を変更したりする必要はありません。
50

ここで2つの個別の問題が発生しています。


hduser@ubuntu:/usr/local/hadoop$ hadoop fs -put /usr/local/input-data/ /input put: /usr/local/input-data (Permission denied)

ここでは、ユーザーhduserはローカルディレクトリ/usr/local/input-dataにアクセスできません。つまり、ローカルのアクセス許可が厳しすぎます。変更する必要があります。


hduser@ubuntu:/usr/local/hadoop$ Sudo bin/hadoop fs -put /usr/local/input-data/ /inwe put: org.Apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="":hduser:supergroup:rwxr-xr-x

ここでは、ユーザーroot(Sudoを使用しているため)は、HDFSディレクトリ/inputにアクセスできません。ご覧のとおり:hduser:supergroup:rwxr-xr-xは、hduserのみが書き込みアクセス権を持っていると言います。 Hadoopは、特別なユーザーとしてrootを実際に尊重しません。


これを修正するには、ローカルデータのアクセス許可を変更することをお勧めします。

Sudo chmod -R og+rx /usr/local/input-data/

次に、putコマンドを再試行しますas hduser

14
Donald Miner

(ルートから)hduserとしてシェルを起動し、コマンドを実行します

Sudo -u hduser bash
hadoop fs -put /usr/local/input-data/ /input

[更新]また、hdfsユーザーはスーパーユーザーであり、すべてのr/w特権を持っていることに注意してください。

5
Martin Tapp

次の手順を使用してこの問題を解決しました

su hdfs
hadoop fs -put /usr/local/input-data/ /input
exit
4
java_dev