티스토리 뷰
반응형
하둡에서 권한관리가 되어있을때 나타나는 문제이다. 다음과 같이 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 유저를 추가하면 접근이 가능해지고 접근이 가능해진다.
#----------------------
# 권한 부여전
#----------------------
% 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
끝.
반응형
'데이터처리 > Flink' 카테고리의 다른 글
[FLINK] 슬라이딩 윈도우의 TOP N 처리시 backpressure 문제 해결방법 (1) | 2024.01.10 |
---|---|
[FLINK] sql-client 에서 작업이름(job name)을 직접 지정하는 방법 (0) | 2024.01.09 |
[Flink] UnsupportedFileSystemSchemeException - 데몬 기동 오류 해결하기 (0) | 2023.02.20 |
[FLINK] Yarn Session 클러스터를 띄울때 Deployment took more than 60 seconds 대기하는 문제 해결방법 (3가지 케이스) (0) | 2022.12.01 |
[FlinkSQL] Kafka 연동시 SCRAM-SHA-512 인증이 필요한 경우 해결방법 (0) | 2022.10.14 |
댓글