web-dev-qa-db-ja.com

ジョブ実行時のHadoopDFS権限の問題

次の権限エラーが発生しますが、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)に書き込まれると、セキュリティの観点からは便利です。

10
Dolan Antenucci

次の設定でこれを機能させることができました。

<configuration>
    <property>
        <name>mapreduce.jobtracker.staging.root.dir</name>
        <value>/user</value>
    </property>

    #...

</configuration>

ジョブトラッカーサービスの再起動も必要です(問題の追跡に協力してくれたHadoopメーリングリストのJeffに特に感謝します!)

15
Dolan Antenucci

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/
2
minhas23

「hdfs」という名前の新しいユーザーを作成することもできます。非常に単純な解決策ですが、おそらくそれほどきれいではありません。

もちろん、これはCloudera Hadoop Manager(CDH3)でHueを使用している場合です。

0
Highmastdon

システムのルートディレクトリの権限を設定する代わりに、hadoopルートディレクトリ(/)の権限を設定する必要があります。私でさえ混乱しましたが、言及されたディレクトリはhadoopのファイルシステムのものであり、システムのものではないことに気づきました。

0
divinedragon