Hive CLI: таблица не создана с тем же пользователем, что и база данных (разрешение запрещено) - PullRequest
0 голосов
/ 01 апреля 2020


Платформа: кластер HDP3 с 6 узлами
Выполнение этого из узла данных ( non-NameNode )

Цель: Заставить нового пользователя создать базу данных и таблицу в ней. просто.
Вот шаги, которые я выполнил, и ошибка, которую я получил ниже:

[root@server:~]useradd lebowski               // create user
[root@server:~]passwd lebowski 
[root@server:~]usermod -a -G hadoop lebowski  // add user to hadoop group
[root@server:~]su lebowski
[lebowski@server:~]$ groups
lebowski hadoop           //All good

[lebowski@server:~]$hive                          //same output & issues w/ beeline as well
0: jdbc:hive2://server.com> CREATE DATABASE dude;
0: jdbc:hive2://server.com> use dude;

0: jdbc:hive2://server.com> CREATE TABLE BIG (//table creation stuff goes here//);

ОШИБКА: СБОЙ: Ошибка выполнения, код возврата 1 из org . apache .had oop .hive.ql.exe c .DDLTask. MetaException (сообщение: Got исключение: org. apache .had oop .security.AccessControlException

В доступе отказано: пользователь = lebowski , доступ = ВЫПОЛНИТЬ, inode = "/ склад / табличное пространство / управляемый / куст / dude.db": куст: имел oop: drwxrwx ---

Сейчас Как вы можете видеть: dude.db файл на hdfs принадлежит hive и относится к группе 'had oop '

dude.db:hive:hadoop:drwxrwx---

Удивительные факты:
- Поскольку для hive.server2.enable.doAs установлено значение true, HiveServer2 должен выполнять операции Hive как пользователь, отправляющий запрос.
- Владелец базы данных - hive, хотя пользователь, отправляющий запрос, - lebowski.
- хотя создание таблицы связано с пользователем lebowski, который отклоняется при попытке записи в папку базы данных, ранее созданную в hdfs.

То, что я пытался:
Я пытался заставить hadoop.security.group.mapping к ShellBasedUnixGroupsMapping, но это приводит к сбою перезапуска NameNode, поэтому я вернул его к значению по умолчанию (Jni) .
Я также пытался обновить sh групповые сопоставления: hdfs dfsadmin -refreshUserToGroupsMappings

ВОПРОС : почему один и тот же контекст использует одного технического пользователя для записи в hdfs ( hive в случае создания базы данных) и фактический пользователь (lebowski) для создания таблицы в следующем операторе?

Другая загадочная вещь заключается в том, что я убедился, что пользователь (lebowski) находится в 'имел oop' группу пользователей.
Логично, что эту ошибку не следует поднимать: пользователь входит в группу с правами rwx на папку hdfs.

Одно из возможных объяснений - моя отправная точка для этого post: "unix" пользователь lebowski был создан из узла данных, поэтому я не уверен, как он распространяется на весь кластер

Еще одно преимущество - управление ролями Hive & Предоставления, которые могут конфликтовать / мешать / отменять права и разрешения на основе POSIX.

Возможные обходные пути : я мог бы подключиться как hdfs или улей, или принудительно войти через chmod, но я хотел бы, за один раз , чтобы сделать вещи производственные дружественным путем, к книге, и не взламывайте мой путь через это.

Дополнительная информация:

Рейнджер установлен, но Hive Plugin не активирован

hive.security.authorization.manager установлен в org. apache .had oop .hive.ql.security.authorization.plugin.fallback.FallbackHiveAuthorizerFactory

hive.security.authorization.enabled установлен в true

Любые просвещенные мысли Добро пожаловать.

...