У меня есть небольшое приложение, которое читает файл с моего локального компьютера и записывает данные в hdfs.AccessControlException в Hadoop для доступа = EXECUTE
Теперь я хочу перечислить файлы, находящиеся в папке hdfs, скажем HadoopTest. Когда я пытаюсь это сделать, я получаю следующее исключение:
org.apache.hadoop.security.AccessControlException: Permission denied: user=rpoornima, access=EXECUTE, inode="/hbase/HadoopTest/Hadoop_File_1.txt":rpoornima:hbase:-rw-r--r--
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:205)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkTraverse(FSPermissionChecker.java:161)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:128)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:4547)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkTraverse(FSNamesystem.java:4523)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getListingInt(FSNamesystem.java:3312)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getListing(FSNamesystem.java:3289)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getListing(NameNodeRpcServer.java:652)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getListing(ClientNamenodeProtocolServerSideTranslatorPB.java:431)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java:44098)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:453)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:898)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1693)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1689)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1687)
Я не уверен, как решить эту проблему. любезно дайте вам материалы.
Благодарим за решение. У других пользователей «hdfs» и «root» есть полный доступ. Но не знаете, как получить доступ к папке «HadoopTest» как пользовательский «root» из java-кода. любая идея как получить доступ как другого пользователя? – dove4evr
Исключение указано, что вы используете 'user = rpoornima', который не имеет привилегий в указанном каталоге. Не «корень». – luoluo
Пользователь = rpoornima получает полный доступ, как указано ниже в файле passwd: rpoornima: x: 102: 106 Я выяснил, что каждый раз, когда я пишу новый файл, разрешение сбрасывается на -rw-r-- р--. Поэтому в коде Java, я установить разрешение, как указано ниже: "TXT" \t \t \t \t \t \t \t «путь Path = новый путь ((hdfsurl.append ("/ HBase/HadoopTest/Hadoop_File _" + FileCount +)).нанизывать()); \t \t os = hdfs.create (path); \t \t hdfs.setPermission (путь, новый FsPermission (FsAction.ALL, FsAction.ALL, FsAction.ALL)); После этого файл записывается с разрешением ниже: -rw-RW-rw- 3 rpoornima HBase HadoopTest/Hadoop_File_1.txt – dove4evr