1. ホーム
  2. hadoop

[解決済み] HDFSのHiveプロキシユーザーの最適なソリューションは何ですか?

2022-02-15 19:46:28

質問内容

HDFSとHiveのproxyuserの設定が非常にわかりにくいです。hive-site.xmlのdoAsオプションは有効にしています。

<property>
    <name>hive.server2.enable.doAs</name>
    <value>true</value>
</property>

そして、core-site.xmlのproxyuser。

<property>
    <name>hadoop.proxyuser.hdfs.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.hdfs.groups</name>
    <value>*</value>
</property>

しかし、これでは原因になります。

2017-03-29 16:24:59,022 INFO org.apache.hadoop.ipc.Server: Connection from 172.16.0.239:60920 for protocol org.apache.hadoop.hdfs.protocol.ClientProtocol is unauthorized for user hive (auth:PROXY) via hive (auth:SIMPLE)
2017-03-29 16:24:59,023 INFO org.apache.hadoop.ipc.Server: Socket Reader #1 for port 9000: readAndProcess from client 172.16.0.239 threw exception [org.apache.hadoop.security.authorize.AuthorizationException: User: hive is not allowed to impersonate hive]

コアサイト.xmlは他のサービスと共有されるため、全てのサービスがハイブとしてHDFSにアクセスするのは好ましくないので、多くの例にあるようにproxyuserをquot; hive"に設定しませんでしたが、試してみたところ、コアサイト.xmlは以下のような表示になります。

<property>
    <name>hadoop.proxyuser.hive.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.hive.groups</name>
    <value>*</value>
</property>

再度beelineを起動したところ、今度はログインは問題ないのですが、コマンド実行時にyarnが例外を発生させました。

Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. Permission denied: user=hive, access=WRITE, inode="/user/yarn/hive/.staging":hdfs:supergroup:drwxr-xr-x

Proxyuser "hive" は "hdfs" によって所有されている staging フォルダから拒否されました。私は、HDFSに保護を与えながら、フォルダを皆に開放する意味がないので、stagingフォルダに777を与えることは良い考えだとは思いません。だから私の質問は、Hive、Hdfs、およびYarnの間の権限を設定するための最良の解決策は何ですか?

Hadoopのパーミッションは私にとって悪夢です、助けてください。

どうすればいいですか?

にプロキシユーザーのエントリーを追加する。 core-site.xml というスーパーユーザが hive を使えば、どのホストからでも接続できます(値が * ) 任意のグループに所属するユーザになりすますことができます (値は * ).

<property>
    <name>hadoop.proxyuser.hive.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.hive.groups</name>
    <value>*</value>
</property>

これは、実際のホスト名やグループ名を渡すことで、より制限を強めることができます(Refer スーパーユーザ ). スーパーユーザのアクセス権限 hive がFS上で持っているものは、なりすましユーザーにも適用されます。

複数ユーザーのHadoop環境では、スーパーユーザーごとに専用のディレクトリを作成し、そこにファイルを保存するよう関連サービスを設定するのがベストプラクティスでしょう。そして、グループ supergroup 必要であれば、ファイルに対してグループレベルのアクセス権を与えることができます。

このプロパティを hdfs-site.xml を使用してスーパーグループを設定します。

<property>
   <name>dfs.permissions.superusergroup</name>
   <value>supergroup</value> 
   <description>The name of the group of super-users.</description>
</property>