티스토리 뷰

반응형

하둡에서 권한관리가 되어있을때 나타나는 문제이다. 다음과 같이 hive catalog 를 등록하려고 했는데 다음과 같은 오류가 발생한다. 

참고로 커버로스 인증으로 구성된 하둡 클러스터 환경에서 flink 유저를 만들어서 사용한 케이스이고, 원인은 Ranger 에서 flink 유저는 hive 의 warehouse 패스의 hdfs 접근이 제한되어있기 때문에 나타나는 현상이다.

Flink SQL> create catalog myHive with( 'type' = 'hive' , 'hive-conf-dir' = '/usr/hdp/3.3.0/hive/conf');
[ERROR] Could not execute SQL statement. Reason:
org.apache.hadoop.hive.metastore.api.MetaException: org.apache.hadoop.security.AccessControlException: org.apache.ranger.authorization.hadoop.exceptions.RangerAccessControlException: Permission denied: user=flink, access=EXECUTE, inode="/warehouse/tablespace/managed/hive"
        at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:253)
        at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkTraverse(FSPermissionChecker.java:713)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkTraverse(FSDirectory.java:1892)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkTraverse(FSDirectory.java:1910)
        at org.apache.hadoop.hdfs.server.namenode.FSDirectory.resolvePath(FSDirectory.java:727)
        at org.apache.hadoop.hdfs.server.namenode.FSDirStatAndListingOp.getFileInfo(FSDirStatAndListingOp.java:112)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getFileInfo(FSNamesystem.java:3379)
        at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getFileInfo(NameNodeRpcServer.java:1215)
        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getFileInfo(ClientNamenodeProtocolServerSideTranslatorPB.java:1044)
        at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
        at org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine2.java:621)
        at org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine2.java:589)
        at org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine2.java:573)
        at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1213)
        at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:1089)
        at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:1012)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1899)
        at org.apache.hadoop.ipc.Server$Handler.run(Server.java:3026)
Caused by: org.apache.ranger.authorization.hadoop.exceptions.RangerAccessControlException: Permission denied: user=flink, access=EXECUTE, inode="/warehouse/tablespace/managed/hive"
        at org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer$RangerAccessControlEnforcer.checkRangerPermission(RangerHdfsAuthorizer.java:502)
        at org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer$RangerAccessControlEnforcer.checkPermissionWithContext(RangerHdfsAuthorizer.java:232)
        at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:240)
        ... 19 more

실제로 해당 경로를 flink 유저 권한으로 확인해보면 접근이 불가능하다.

% hadoop fs -ls hdfs://mynameService//warehouse/tablespace/managed/hive
ls: org.apache.ranger.authorization.hadoop.exceptions.RangerAccessControlException: Permission denied: user=flink, access=EXECUTE, inode="/warehouse/tablespace/managed/hive"

 

해결방법

이 문제를 해결하려면, Ranger 의 HDFS 권한에서 hive-warehouse 권한 목록에 해당 유저가 접근할 수 있도록 권한을 부여해야한다.

원래라면 hive, spark, hbase 유저만 접근이 가능하게 세팅되어있는데, flink 유저를 추가하면 접근이 가능해지고 접근이 가능해진다.

Ranger 에서 권한을 부여

#----------------------
# 권한 부여전
#----------------------
% hadoop fs -ls hdfs://mynameService//warehouse/tablespace/managed/hive
ls: org.apache.ranger.authorization.hadoop.exceptions.RangerAccessControlException: Permission denied: user=flink, access=EXECUTE, inode="/warehouse/tablespace/managed/hive"

#----------------------
# 권한 부여후
#----------------------
% hadoop fs -ls hdfs://mynameService//warehouse/tablespace/managed/hive
Found 17 items
....
drwxrwx---+  - hive hadoop          0 2022-12-15 19:00 hdfs://mynameService/warehouse/tablespace/managed/hive/sys.db
drwxrwx---+  - hive hadoop          0 2023-03-10 01:02 hdfs://mynameService/warehouse/tablespace/managed/hive/temp.db

#----------------------
# 권한 부여후 sql-client.sh 에서 시도하면 성공
#----------------------
% ./bin/sql-client.sh
Flink SQL> create catalog myHive with( 'type' = 'hive' , 'hive-conf-dir' = '/usr/hdp/3.3.0/hive/conf');
[INFO] Execute statement succeed.

Flink SQL> use catalog myHive;
[INFO] Execute statement succeed.

Flink SQL> show tables;
Empty set

Flink SQL> show databases;
+--------------------+
|      database name |
+--------------------+
...
|                sys |
|               temp |
+--------------------+
18 rows in set

끝.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함