次の権限エラーが発生しますが、hadoopがこの特定のフォルダーに書き込もうとしている理由がわかりません。
hadoop jar /usr/lib/hadoop/hadoop-*-examples.jar pi 2 100000
Number of Maps = 2
Samples per Map = 100000
Wrote input for Map #0
Wrote input for Map #1
Starting Job
org.Apache.hadoop.security.AccessControlException: org.Apache.hadoop.security.AccessControlException: Permission denied: user=myuser, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x
それが私のhdfsのルートに書き込もうとしている理由は何ですか?
更新:一時的にhdfsルート(/)を777パーミッションに設定した後、「/ tmp」フォルダーが書き込まれているのがわかりました。 1つのオプションは、すべてのユーザーが書き込むためのオープンなアクセス許可を持つ「/ tmp」フォルダーを作成することだと思いますが、これが代わりにユーザーフォルダー(つまり/ user/myuser/tmp)に書き込まれると、セキュリティの観点からは便利です。
次の設定でこれを機能させることができました。
<configuration>
<property>
<name>mapreduce.jobtracker.staging.root.dir</name>
<value>/user</value>
</property>
#...
</configuration>
ジョブトラッカーサービスの再起動も必要です(問題の追跡に協力してくれたHadoopメーリングリストのJeffに特に感謝します!)
1)次のコマンドを使用して、hdfsに{mapred.system.dir}/mapredディレクトリを作成します
Sudo -u hdfs hadoop fs -mkdir /hadoop/mapred/
2)マップされたユーザーに許可を与える
Sudo -u hdfs hadoop fs -chown mapred:hadoop /hadoop/mapred/
「hdfs」という名前の新しいユーザーを作成することもできます。非常に単純な解決策ですが、おそらくそれほどきれいではありません。
もちろん、これはCloudera Hadoop Manager(CDH3)でHueを使用している場合です。
システムのルートディレクトリの権限を設定する代わりに、hadoopルートディレクトリ(/)の権限を設定する必要があります。私でさえ混乱しましたが、言及されたディレクトリはhadoopのファイルシステムのものであり、システムのものではないことに気づきました。