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$
Dfsパーミッションを無効にすることでこの問題を一時的に解決しました。以下のプロパティコードをconf/hdfs-site.xmlに追加することで
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
私は同様の状況にありましたが、ここで私のアプローチは多少異なります:
HADOOP_USER_NAME=hdfs hdfs dfs -put /root/MyHadoop/file1.txt /
実際に行うことは、ローカルアクセス許可に従ってローカルファイルを読み取ることですが、HDFSにファイルを配置するときは、ユーザーhdfs
のように認証されます。他のIDを使用してこれを行うことができます(実際の認証スキームの構成に注意してください。ただし、通常はそうではありません)。
利点:
Sudo
は必要ありません。ここで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。
(ルートから)hduserとしてシェルを起動し、コマンドを実行します
Sudo -u hduser bash
hadoop fs -put /usr/local/input-data/ /input
[更新]また、hdfs
ユーザーはスーパーユーザーであり、すべてのr/w特権を持っていることに注意してください。
次の手順を使用してこの問題を解決しました
su hdfs
hadoop fs -put /usr/local/input-data/ /input
exit