Ошибка разрешения / запрос сверления Apach | HDFS

Я пытаюсь запросить паркетные файлы, присутствующие в кластере hdfs, с помощью Apache Drill (распределенный режим).
Я создал новый плагин хранения под названием «hdfs», который содержит следующую конфигурацию:

{
  "type": "file",
  "enabled": true,
  "connection": "hdfs://<my-name-node-host>:8020",
  "config": null,
  "workspaces": {
    "root": {
      "location": "/",
      "writable": true,
      "defaultInputFormat": null
    }
  },
  "formats": {
    "json": {
      "type": "json",
      "extensions": [
        "json"
      ]
    },
    "parquet": {
      "type": "parquet"
    }
  }
}

В Hadoop fs у меня есть пример области файла.паркет в /user/tj/папке. У него есть владелец и группа hdfs:hdfsпо умолчанию, и я хотел бы сохранить его так.

Но когда я пытаюсь запросить его из Apache drill UI через следующий sql-запрос :
SELECT * FROM hdfs./user/tj/region.parquet
Это вызывает исключение, как показано ниже :

org.апаш.дрель.общий.исключения.UserRemoteException: системная ошибка:
RemoteException: отказано в разрешении:
пользователь=,
access=выполнить,
inode= » / user/tj / region.паркет./дрель.parquet_metadata»: hdfs:hdfs: — rw-r—r—
на
org.апаш.платформа Hadoop.hdfs.сервер.namenode.FSPermissionChecker.проверка (FSPermissionChecker.java:319)
на
org.апаш.платформа Hadoop.hdfs.сервер.namenode.FSPermissionChecker.checkTraverse (FSPermissionChecker.java: 259)
на
org.апаш.платформа Hadoop.hdfs.сервер.namenode.FSPermissionChecker.checkPermission (FSPermissionChecker.java: 205)
на
org.апаш.платформа Hadoop.hdfs.сервер.namenode.FSPermissionChecker.checkPermission (FSPermissionChecker.java: 190)
на
org.апаш.платформа Hadoop.hdfs.сервер.namenode.FSDirectory.checkPermission (FSDirectory.java: 1827)
на
org.апаш.платформа Hadoop.hdfs.сервер.namenode.FSDirStatAndListingOp.getFileInfo (FSDirStatAndListingOp.java: 108)
на
org.апаш.платформа Hadoop.hdfs.сервер.namenode.FSNamesystem.getFileInfo (FSNamesystem.java: 3972)
на
org.апаш.платформа Hadoop.hdfs.сервер.namenode.NameNodeRpcServer.getFileInfo (NameNodeRpcServer.java: 1130)
на
org.апаш.платформа Hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSidetranslatorpb.getFileInfo (ClientNamenodeProtocolServerSidetranslatorpb.java: 851)
на
org.апаш.платформа Hadoop.hdfs.протокол.прото.ClientNamenodeProtocolProtos$ClientNamenodeProtocol.callBlockingMethod (ClientNamenodeProtocolProtos.Ява)
на
org.апаш.платформа Hadoop.МПК.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.звоните (ProtobufRpcEngine.java:640)
в org.апаш.платформа Hadoop.МПК.сервер RPC.вызов (RPC.java:982) at
org.апаш.платформа Hadoop.МПК.Сервер$Handler

I am trying to query parquet files present on a hdfs cluster via Apache Drill(distributed mode).
I have created a new storage plugin named ‘hdfs’ which contains the following configuration:

{
  "type": "file",
  "enabled": true,
  "connection": "hdfs://<my-name-node-host>:8020",
  "config": null,
  "workspaces": {
    "root": {
      "location": "/",
      "writable": true,
      "defaultInputFormat": null
    }
  },
  "formats": {
    "json": {
      "type": "json",
      "extensions": [
        "json"
      ]
    },
    "parquet": {
      "type": "parquet"
    }
  }
}

In the hadoop fs I have the sample file region.parquet in /user/tj/ folder. It has the owner and group as hdfs:hdfs by default and i would like to keep it so.

But when i try to query it from Apache drill UI via following sql query :
SELECT * FROM hdfs./user/tj/region.parquet
It throws the exception as below :

org.apache.drill.common.exceptions.UserRemoteException: SYSTEM ERROR:
RemoteException: Permission denied:
user=,
access=EXECUTE,
inode=»/user/tj/region.parquet/.drill.parquet_metadata»:hdfs:hdfs:-rw-r—r—
at
org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:319)
at
org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkTraverse(FSPermissionChecker.java:259)
at
org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:205)
at
org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:190)
at
org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1827)
at
org.apache.hadoop.hdfs.server.namenode.FSDirStatAndListingOp.getFileInfo(FSDirStatAndListingOp.java:108)
at
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getFileInfo(FSNamesystem.java:3972)
at
org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getFileInfo(NameNodeRpcServer.java:1130)
at
org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getFileInfo(ClientNamenodeProtocolServerSideTranslatorPB.java:851)
at
org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
at
org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:640)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982) at
org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2313) at
org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2309) 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:1724)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2307) [Error
Id: 24bf0cf0-0181-4c72-97ee-4b4eb98771bf on
:31010]

How do I fix this permission issue to query the hadoop cluster files using apache drill ?

How to execute the query as a hdfs user?

.run (Server.java: 2313) at
org.апаш.платформа Hadoop.МПК.Сервер$Handler

I am trying to query parquet files present on a hdfs cluster via Apache Drill(distributed mode).
I have created a new storage plugin named ‘hdfs’ which contains the following configuration:

{
  "type": "file",
  "enabled": true,
  "connection": "hdfs://<my-name-node-host>:8020",
  "config": null,
  "workspaces": {
    "root": {
      "location": "/",
      "writable": true,
      "defaultInputFormat": null
    }
  },
  "formats": {
    "json": {
      "type": "json",
      "extensions": [
        "json"
      ]
    },
    "parquet": {
      "type": "parquet"
    }
  }
}

In the hadoop fs I have the sample file region.parquet in /user/tj/ folder. It has the owner and group as hdfs:hdfs by default and i would like to keep it so.

But when i try to query it from Apache drill UI via following sql query :
SELECT * FROM hdfs./user/tj/region.parquet
It throws the exception as below :

org.apache.drill.common.exceptions.UserRemoteException: SYSTEM ERROR:
RemoteException: Permission denied:
user=,
access=EXECUTE,
inode=»/user/tj/region.parquet/.drill.parquet_metadata»:hdfs:hdfs:-rw-r—r—
at
org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:319)
at
org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkTraverse(FSPermissionChecker.java:259)
at
org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:205)
at
org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:190)
at
org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1827)
at
org.apache.hadoop.hdfs.server.namenode.FSDirStatAndListingOp.getFileInfo(FSDirStatAndListingOp.java:108)
at
org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getFileInfo(FSNamesystem.java:3972)
at
org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getFileInfo(NameNodeRpcServer.java:1130)
at
org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getFileInfo(ClientNamenodeProtocolServerSideTranslatorPB.java:851)
at
org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
at
org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:640)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982) at
org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2313) at
org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2309) 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:1724)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2307) [Error
Id: 24bf0cf0-0181-4c72-97ee-4b4eb98771bf on
:31010]

How do I fix this permission issue to query the hadoop cluster files using apache drill ?

How to execute the query as a hdfs user?

.run (Server.java:2309) at
Ява.безопасность.AccessController.doPrivileged (родной метод) на
javax.безопасность.автор.Предмет:.doAs (Subject.java:422) at
org.апаш.платформа Hadoop.безопасность.UserGroupInformation.doAs (UserGroupInformation.java: 1724)
в org.апаш.платформа Hadoop.МПК.Server$Handler.run (Server.java:2307) [ошибка
Id: 24bf0cf0-0181-4c72-97ee-4b4eb98771bf on
:31010]

Как исправить эту проблему разрешений для запроса файлов кластера hadoop с помощью Apache drill ?

Как выполнить запрос от имени пользователя hdfs?

1 ответ

  1. Я думаю, что вы настроили олицетворение пользователя.Вы можете перейти по ссылке ниже, чтобы дать разрешение на просмотр для тренировки apache. Я на самом деле не использовал Apache drill поэтому, пожалуйста, обновите в комментарии, если он работает хорошо.

    Настройка олицетворения пользователя ссылка